Installation WIX 3.10-写入HKLM

Installation WIX 3.10-写入HKLM,installation,wix,windows-installer,registry,Installation,Wix,Windows Installer,Registry,我正在尝试使用WIX安装程序向HMLM写入注册表值,但到目前为止运气不佳 我已经阅读了官方文件和一些相关信息。皮蒂,但官方医生只说如何写信给港大,这不符合我的需要 我还研究了一些问题,如 但如果我试着这样做并把它放进去 我有x86安装程序,并尝试按照建议写入软件\Wow6432Node,但没有成功 在3.10版本中设置它可能会有一些不同吗?是否有人可以编写一个包含一些环境的示例,以了解在安装时创建注册表文件夹+键值以及在卸载时删除键值的方式和位置 多谢各位 要写入注册表,需要将元素作为子元素添加

我正在尝试使用WIX安装程序向HMLM写入注册表值,但到目前为止运气不佳

我已经阅读了官方文件和一些相关信息。皮蒂,但官方医生只说如何写信给港大,这不符合我的需要

我还研究了一些问题,如 但如果我试着这样做并把它放进去 我有x86安装程序,并尝试按照建议写入软件\Wow6432Node,但没有成功

在3.10版本中设置它可能会有一些不同吗?是否有人可以编写一个包含一些环境的示例,以了解在安装时创建注册表文件夹+键值以及在卸载时删除键值的方式和位置


多谢各位

要写入注册表,需要将元素作为子元素添加到注册表中

在简短的代码片段中,我创建了一个组件,该组件将在HKLM\SOFTWARE\$(var.RegistryRootKeyName)\v7处向注册表添加一个名为“ClientPath”的注册表项,该注册表项的值为INSTALLDIR属性

<DirectoryRef Id="BIN">
    <Component Id="program.exe">
        <File Id="program.exe" KeyPath="yes" Source="$(var.BinariesDir)\_bin\program.exe" />
        <Shortcut       
            Id="ClientInstallDirShortcut" 
            Name="$(var.Product) $(var.InstallerVersion)" 
            Directory="INSTALLDIR"
            Target="[#program.exe]" 
            WorkingDirectory="BIN"/>
        <RegistryValue  
            Id="ClientInstallDirRegShortcut" 
            Root="HKLM" 
            Key="SOFTWARE\$(var.RegistryRootKeyName)\v7"                                         
            Type="string"
            Name="ClientPath"
            Value="[INSTALLDIR]"/>
    </Component>
</DirectoryRef>

现在,要创建此注册表,您需要在安装期间安装的功能中包含该组件

<Feature Id="ClientMain" Title="Client" Level="1" >
    <ComponentRef Id="program.exe" />
</Feature>

由于您拥有此注册表位置,因此卸载与组件相关的所有内容后,windows installer会自动删除注册表项,如果创建的文件夹为空,也会删除这些注册表项

我认为您遇到的问题与HKLM\SOFTWARE\Wow6432Node的混淆有关。实际上,您不必在注册表项中指定Wow6432Node。如果您这样做,那么您的注册表项可能会转到HKLM\SOFTWARE\Wow6432Node\Wow6432Node\

在64位机器上打开/创建注册表项时,可以看到注册表的两个“视图”。您可以使用32位视图或64位视图

使用32位视图时,Wow6432Node会自动插入HKLM\SOFTWARE\..的注册表项路径中。您可以通过向registryvalue元素添加Win64=“yes”来强制64位视图,但应确保您仅尝试写入或读取64位计算机上的64位注册表


注册表使用的默认视图与进程的位关联。如果您在64位计算机上运行64位进程安装程序,要访问32位注册表位置,需要设置Win64=“否”(我认为这就是它的工作方式)。与32位安装程序类似,默认视图是32位注册表,它会自动将Wow6432Node添加到HKLM\SOFTWARE注册表项中

再次感谢布莱恩!你救了我一天:)问题似乎出现在Wow6432Node中-它确实产生了一个重复的密钥。说到组件本身,我把它作为一个单独的组件放在uder组件组中。我不知道为什么它需要设置“Directory”属性,如果它没有在任何地方使用,但它现在可以工作了。非常感谢你的帮助!