简短版本的问题 - 可能阻止我的WiX构建的安装程序创建注册表项(或包含创建它的组件)?
更长的版本: 使用以下代码,我创建了一个WiX构建的安装程序,用于创建注册表项:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="RegistrySetup" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="b56de3e6-b630-4763-886e-fe14f5d571ae">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="RegistrySetup" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="RegistrySetup" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="RegistryEntries" Guid="B0A06192-89B4-4D23-B983-EDB18BCEE2C9">
<RegistryKey Root="HKLM" Key="Software\MyCompany\MyProduct">
<RegistryValue Type="string" Name="Version" Value="[ProductVersion]" KeyPath="yes"/>
</RegistryKey>
</Component>
</ComponentGroup>
</Fragment>
</Wix>
这很好用。我还有另一个更复杂的安装,我想添加相同的注册表项,所以我认为我唯一需要做的就是获取<Component>
部分,复制它,将其封装在一个<DirectoryRef>
,更改guid,并将组件ID添加到作为程序功能的一部分安装的组件列表中,如下所示:
<Product>
...
<DirectoryRef Id="INSTALLDIR">
<Component Id="RegistryEntries" Guid="A0A06192-89B4-4D23-B983-EDB18BCEE2C9">
<RegistryKey Root="HKLM" Key="Software\MyCompany\MyProduct">
<RegistryValue Type="string" Name="Version" Value="[ProductVersion]" KeyPath="yes"/>
</RegistryKey>
</Component>
</DirectoryRef>
...
<Feature Id="Complete" Title="MyProduct">
<ComponentRef Id="RegistryEntries/>
...
</Feature>
</Product>
但是,当我这样做并运行安装时,不会创建注册表项。不仅如此,当我使用Orca查看已编译的Windows安装程序数据库时,RegistryEntries组件甚至不是安装程序的一部分 - 就好像WiX由于某种原因将其从安装中剥离了一样。我认为这可能与安装程序位数(32位或64位)有关,并尝试编译x86或x64的安装程序的所有组合,并在Component和RegistryKey条目上设置Win64 = yes或no,但这并没有影响事物....任何想法会导致组件不被包括在内?