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

时间:2018-01-23 09:09:35

标签: wix windows-installer wix4

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

以下工作正常:

  <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>

有没有理由说第二个代码块不起作用?

2 个答案:

答案 0 :(得分:1)

TEST OK :我对此进行了测试,并且从注册表的32位部分(HKLM\SOFTWARE\WOW6432Node)检索了这两个值,没有任何问题。

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

  • HKLM \ SOFTWARE(适用于64位应用程序)
  • HKLM \ SOFTWARE \ WOW6432Node(适用于32位应用程序 - 信不信由你)

我想知道你是否只是混淆了注册表中的路径?这是我正在阅读的地方 - 当然是在HKLM中(为了使其适合页面,我剪裁了一下屏幕截图):

Reading from HKLM 32-bit section

UPDATE :我现在已经从注册表的32位和64位部分测试了这个读数。就我所见,它按预期工作?您的注册表路径中某处必定存在错误?

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

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

目前还不清楚这些值(您使用RegistrySearch从注册表中读回 - 是如何实际写入注册表的?也许它们来自您的应用程序的先前版本或来自其他应用程序并且您想要“复制”它们?如果是,您可以验证它们是HKCU还是HKLM设置?对于HKCU设置,出于可靠性原因,我更愿意在应用程序中进行复制。

答案 1 :(得分:0)

如果您想要保留用户选择的属性值,可能更容易让WiX使用“记住属性”模式来执行此操作。

目前尚不清楚如何保存这些值并检索它们,因为没有迹象表明您是将它们保存在32位还是64位,或者如果您使用-arch开关来设置默认值,因此,您可能正在从不同的位数位置保存或恢复它们(请参阅RegistrySearch win64设置)。没有这种背景,不清楚该搜索是否有效。在没有Win64 = yes的情况下,出现为32位搜索,但-arch开关更改默认值。