gpt4 book ai didi

directory - 没有任何目录的 WiX 安装

转载 作者:行者123 更新时间:2023-12-02 23:38:59 24 4
gpt4 key购买 nike

WiX 3.5。我的安装项目除了以下内容之外什么也不做:

  1. 创建一个带有值的注册表项;
  2. 安装两个证书。

可以在没有任何“目录”元素的情况下构建 WiX 项目吗?

这是我在 WiX 项目中的 XML 代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<Product
Id="GUID"
Name="SetupProject1" Language="1033" Version="1.0.0.0"
Manufacturer="SetupProject1" UpgradeCode="GUID">
<Package InstallerVersion="200" Compressed="yes" Languages="1033" SummaryCodepage="1252" />

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<Binary Id="testRootCABinaryStream"
SourceFile="D:\testRootCA.cer" />
<Binary Id="testSigningBinaryStream"
SourceFile="D:\testSigning.cer" />

<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="SetupProject1">
<Component Id="RegistrySetting" Guid="GUID">
<iis:Certificate Id="testRootCA"
BinaryKey="testRootCABinaryStream"
Name="Test Root CA Certificate"
Overwrite="yes"
Request="no"
StoreLocation="localMachine"
StoreName="root"/>
<iis:Certificate Id="testSigning"
BinaryKey="testSigningBinaryStream"
Name="Test Signing Certificate"
Overwrite="yes"
Request="no"
StoreLocation="localMachine"
StoreName="trustedPublisher"/>
<RegistryValue Root="HKLM" Key="Software\Microsoft\Silverlight"
Name="AllowElevatedTrustAppsInBrowser"
Type="integer" Value="00000001" KeyPath="yes" />
</Component>
</Directory>
</Directory>
</Directory>

<Feature Id="Complete" Title="SetupProject1" Level="1">
<ComponentRef Id="RegistrySetting" />
<ComponentGroupRef Id="Product.Generated" />
</Feature>
</Product>
</Wix>

实际上,此代码不会在 Program Files 文件夹中创建任何目录,但如果我在没有 Directory 元素的情况下编译项目(在我的情况下,Component 元素紧随 Binary 元素),则会失败并出现以下错误:

“未找到 Component/@Directory 属性;它是必需的。”

更新

感谢严老师的详细解答。现在我在目录部分的代码片段看起来像(现在更正确了):

<Directory Id="TARGETDIR" Name="SourceDir" />

<DirectoryRef Id="TARGETDIR">
<Component Id="CompleteInstallation" Guid="Guid">
<iis:Certificate Id="testRootCA"
BinaryKey="testRootCABinaryStream"
Name="Test Root CA Certificate"
Overwrite="yes"
Request="no"
StoreLocation="localMachine"
StoreName="root"/>
<iis:Certificate Id="testSigning"
BinaryKey="testSigningBinaryStream"
Name="Test Signing Certificate"
Overwrite="yes"
Request="no"
StoreLocation="localMachine"
StoreName="trustedPublisher"/>
<RemoveFolder Id="ProgramMenuDir" On="uninstall"/>
<RegistryKey Root="HKLM" Key="Software\Microsoft\Silverlight">
<RegistryValue Name="AllowElevatedTrustAppsInBrowser"
Type="integer" Value="00000001" KeyPath="yes" />
</RegistryKey>
</Component>
</DirectoryRef>

最佳答案

此行为的根源在于 Windows Installer 体系结构。如您所知,WiX 是一组创建 Windows Installer 软件包的工具,也就是说,它必须在某种程度上反射(reflect)该技术的关键概念,将最奇怪和最可笑的东西隐藏在语法糖后面。它非常出色地完成了这项工作,并且在各个版本中都得到了改进!

每个 Windows Installer 程序包都必须包含一个 Directory 表。来自 MSDN :

The Directory table must specify a single root directory with a Directory column value equal to the TARGETDIR property.

对应的WiX元素是:

<Directory Id="TARGETDIR" Name="SourceDir">
...
</Directory>

所以,它必须在您的 WiX 创作中。如果您不打算在安装中包含任何目录/文件,则可以将组件放置在此根 Directory 元素下。

关于directory - 没有任何目录的 WiX 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12072774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com