Wix工具集RegistrySearch未保存注册表项

Wix工具集RegistrySearch未保存注册表项,wix,windows-installer,wix4,Wix,Windows Installer,Wix4,我有一个应用程序,它在安装时保存多个注册表项,以确保用户所做的某些选择在应用程序中持久化。这些键中的大多数都能正常工作,但有些不能记录条目。我做错什么了吗?或者WiX注册表搜索是否有限制?我已经检查了文件,找不到任何限制。我在下面列举了一些例子: 以下各项工作正常: <Property Id="SERVER_NAME"> <RegistrySearch Id='rsSERVER_NAME' Root='HKLM' Key='SOFTWARE\CompanyName

我有一个应用程序,它在安装时保存多个注册表项,以确保用户所做的某些选择在应用程序中持久化。这些键中的大多数都能正常工作,但有些不能记录条目。我做错什么了吗?或者WiX注册表搜索是否有限制?我已经检查了文件,找不到任何限制。我在下面列举了一些例子:

以下各项工作正常:

  <Property Id="SERVER_NAME">
     <RegistrySearch Id='rsSERVER_NAME' Root='HKLM' Key='SOFTWARE\CompanyName\ApplicationName' Name='ServerName' Type='raw' />
  </Property>
以下各项工作不正常:

  <Property Id="SERVER_NAME">
     <RegistrySearch Id='rsSERVER_NAME' Root='HKLM' Key='SOFTWARE\CompanyName\ApplicationName\ApplicationDetails\Servers' Name='ServerName' Type='raw' />
  </Property>

第二个代码块不起作用有什么原因吗?

如果您想保留用户选择中的属性值,那么让WiX使用记住属性模式可能更容易

不清楚您是如何保存和检索这些值的,因为没有指示您是将它们保存在32位还是64位位置,或者是否使用-arch开关设置默认值,因此可能是您从不同的位位置保存或恢复它们请参阅RegistrySearch win64设置。如果没有这种背景,就不清楚这种搜索是否有效。在没有Win64=yes的情况下,它似乎是一个32位搜索,但是-arch开关会更改默认值

测试正常:我对此进行了测试,两个值都是从注册表HKLM\SOFTWARE\WOW6432节点的32位部分检索到的,没有任何问题

这是。下面是Phil提到的64位和32位应用程序的注册表路径-您的WiX代码指定32位,因此您可以从WOW6432Node部分读取:

HKLM\适用于64位应用程序的软件 HKLM\SOFTWARE\WOW6432Node用于32位应用程序-信不信由你 我想知道你是不是把注册表中的路径弄混了?这里是我阅读的地方——当然是在HKLM中,我对截图进行了一些裁剪,使其适合页面:

更新:我现在已经从注册表的32位和64位部分测试了这种读取。就我所知,它能正常工作吗?您的注册表路径中一定有错误

在RegistrySearch运行并检索属性后,我使用一行VBScript显示属性值。如果您需要,我可以更新此答案以添加此代码

当您说应用程序在安装过程中保存多个注册表设置时,您的意思有点不清楚。这是您正在运行的自定义操作,它写入这些注册表项,然后您的安装程序将其读回吗


不清楚这些值(您使用RegistrySearch从注册表中读取)是如何实际写入注册表的?可能它们来自您的应用程序的早期版本或其他应用程序,您想复制它们吗?如果是,您能否验证它们是HKCU还是HKLM设置?对于HKCU设置,出于可靠性原因,我更愿意在应用程序本身中进行复制。

我正在检查WOW6432节点部分。我问题中的第一个示例保存在HKLM\SOFTWARE\WOW6432Node下。。。但是第二个没有。唯一的区别是第二个注册表项下降的级别数。