WiX安装程序未创建注册表项

时间:2016-09-14 21:04:39

标签: wix registry

简短版本的问题 - 可能阻止我的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,但这并没有影响事物....任何想法会导致组件不被包括在内?

0 个答案:

没有答案