0

我有一个应用程序在安装时保存多个注册表项,以确保用户做出的某些选择保留在应用程序中。这些键中的大多数都可以正常工作,但有些键不会记录条目。难道我做错了什么?或者 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>

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

4

2 回答 2

1

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


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

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

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

从 HKLM 32 位部分读取


更新:我现在已经从注册表的 32 位和 64 位部分测试了这个读数。据我所见,它按预期工作吗?您的注册表路径中一定有错误吗?

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

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

目前尚不清楚这些值(您使用从注册表中读取的值)RegistrySearch实际上是如何写入注册表的?也许它们来自您的应用程序的先前版本或来自另一个应用程序,您想“复制”它们?如果是这样,您能否验证它们是 HKCU 还是 HKLM 设置?对于 HKCU 设置,出于可靠性原因,我更愿意在应用程序本身中进行复制。

于 2018-01-25T04:50:04.580 回答
0

如果您想保留用户选择的属性值,让 WiX 使用“记住属性”模式可能会更容易。

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

于 2018-01-23T18:54:49.100 回答