Directory 不带任何目录的WiX安装
WIX3.5。我的安装项目只执行以下操作:Directory 不带任何目录的WiX安装,directory,wix,Directory,Wix,WIX3.5。我的安装项目只执行以下操作: 创建具有值的注册表项 安装两个证书 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"&
<?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文件夹中创建任何目录,但是如果我编译项目时没有目录元素(在我的例子中,组件元素紧跟在二进制元素之后),它将失败,并出现以下错误:
“未找到组件/@目录属性;它是必需的。”
更新
谢谢严的详细回答。现在,我在目录部分的代码片段看起来像(现在更正确):
如果将组件元素直接放在产品下,则必须在组件元素上设置自己的目录属性,因为它是必需的 从文档: 设置组件的目录。如果此元素嵌套在 元素,此值默认为父元素的值 目录/@Id
事实证明,在Windows Installer参考中指出,需要有一个指向中记录的directory_u属性,或通过从中获取的值。如果AppSearch为空,我不确定这将如何解决。这种行为的根源可以追溯到Windows Installer体系结构。正如您所知,WiX是一套创建Windows安装程序包的工具,也就是说,它必须在一定程度上反映这项技术的关键概念,隐藏语法糖背后最奇怪和荒谬的东西。它在这方面做得非常好,从一个版本改进到另一个版本 每个Windows Installer软件包必须包含一个
目录
表。发件人:
目录表必须指定一个具有
目录列值等于TARGETDIR属性
相应的WiX元素是:
<Directory Id="TARGETDIR" Name="SourceDir">
...
</Directory>
...
所以,它一定是在你的WiX创作。如果您不打算在安装中包含任何目录/文件,您可以将组件放在这个根
目录元素下。那么,这个目录元素是什么意思呢?实际上,我的安装中不需要目录。WiX不能创建没有目录的组件,这只是某种传统或WiX的特殊内部逻辑的问题吗?WiX只是Windows Installer上的声明性包装,它必须遵守Windows Installer api规定的规则。
<Directory Id="TARGETDIR" Name="SourceDir">
...
</Directory>