Wix v3.7 - 写入注册表值时出错

Posted

技术标签:

【中文标题】Wix v3.7 - 写入注册表值时出错【英文标题】:Wix v3.7 - Error Writing Registry Values 【发布时间】:2013-08-26 06:07:40 【问题描述】:

我正在使用 wix 创建安装程序,但在写入注册表时遇到问题。这是我的 RegistryValue 元素:

<Component Id="CMP_odbcreg" Guid="115B002E-F4C9-48CD-8E1C-E8803B16AE69">
        <RegistryValue Id="rg_psql" 
                       Root="HKLM" 
                       Key="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers" 
                       Name="PostgreSQL" 
                       Value="Installed" 
                       Type="string" 
                       KeyPath="yes" 
                       Action="write"/>
</Component>

没有任何东西被写入注册表。该组件在我的主要安装功能中,因此它应该始终写入注册表。我查看了我的日志文件,发现:

MSI (s) (60:1C) [00:00:07:080]: Doing action: WriteRegistryValues
MSI (s) (60:1C) [00:00:07:080]: Note: 1: 2205 2:  3: ActionText 
Action 0:00:07: WriteRegistryValues. Writing system registry values
Action start 0:00:07: WriteRegistryValues.
WriteRegistryValues: Key: Writing system registry values, Name: , Value: 
Action ended 0:00:07: WriteRegistryValues. Return value 1.

我不知道我的解释是否正确,但似乎根本没有将任何内容写入注册表。除了 CMP_odbcreg 之外,我还有几个使用 heat 生成的其他组件,这些组件包含应该执行的 RegistryValue 元素。我检查了我的 Windows 注册表并确认没有写入任何值。

我有一个 wix 手册,其中包含写入注册表的示例。我尝试将其复制并粘贴到我的安装程序中,并将其添加到主要安装功能中。那也没用

请帮忙!

【问题讨论】:

【参考方案1】:

原来我查看的是错误的注册表。 Windows 7 机器有一个 32 位和一个 64 位的注册表,所以我应该查看 Windows\SysWOW64 中的 regedit.exe。

【讨论】:

【参考方案2】:

由于现在 64 位系统被广泛传播,我推荐在Registry Redirection 上的一个小讲座,我相信你会发现这些信息对未来很有用。这适用于任何访问注册表的应用程序,而不仅仅是安装程序。

在您的情况下,如果您需要禁用安装程序的重定向,您可以查看this SO thread。

【讨论】:

以上是关于Wix v3.7 - 写入注册表值时出错的主要内容,如果未能解决你的问题,请参考以下文章

基于用户选择的Wix条件注册表写入

(WiX) 将产品信息写入注册表以用于双重用途安装程序

WiX安装选项--环境变量

如何使用 wix 在卸载时编写注册表项

Wix-使用属性名称作为值时无法写入 XML 文件

WiX:有条件地注册应用程序以在 Windows 启动时启动