WIX 3.10 - 写入 HKLM

WIX 3.10 - write to HKLM

我正在尝试使用 WIX 安装程序将注册表值写入 HMLM,但到目前为止还没有成功。

我已经阅读了官方文档,以及一些相关信息。可惜,官方文档只说了怎么写HKLU,不符合我的需求

我也看过一些问题,比如Cannot create registry key value with WiX installer 但如果我尝试这样做并将其放入

我有 x86 安装程序,也尝试按照建议写入 Software\Wow6432Node,但没有成功。

可能3.10版本的设置有一些不同?有人可以编写包含一些环境的示例来弄清楚应该如何以及在何处放置值以在安装时创建注册表文件夹 + 键值并在卸载时删除它们?

非常感谢。

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

在简短的代码片段中,我创建了一个组件,它将在 HKLM\SOFTWARE\$(var.RegistryRootKeyName)\v7 的注册表中添加一个名为 "ClientPath" 的注册表条目,其值为安装目录 属性.

<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 安装程序和创建的文件夹(如果它们为空)将自动删除注册表条目。

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

当您在 64 位计算机上 open/create 注册表项时,您可以看到两个 'views' 注册表。您可以使用 32 位视图或 64 位视图。

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

注册表使用的默认视图与进程的位数有关。如果您是 运行 64 位机器上的 64 位进程安装程序,要访问 32 位注册表位置,您需要设置 Win64="no"(我 认为 这就是它的工作原理)。类似地,对于 32 位安装程序,默认视图是 32 位注册表,它会自动将 Wow6432Node 添加到您的 HKLM\SOFTWARE 注册表项。