2

我正在使用的安装程序有一个组件,它将注册表元素安装到 64 位 HKLM 配置单元中,并将类似的密钥安装到 32 位配置单元中(在 Wow6432Node 下)。安装时日志显示 64 位:

MSI (s) (40:30) [13:29:49:879]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\Company\Product,,BinaryType=1,)
MSI (s) (40:30) [13:29:49:879]: Executing op: RegAddValue(Name=MyValueName,Value=MyValue,)
WriteRegistryValues: Key: \SOFTWARE\Company\Product, Name: MyValueName, Value: MyValue

然后是32位..

MSI (s) (40:30) [13:29:49:910]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\Wow6432Node\Company\Product,,BinaryType=1,)
MSI (s) (40:30) [13:29:49:910]: Executing op: RegAddValue(Name=MyValueName,Value=MyValue,)
WriteRegistryValues: Key: \SOFTWARE\Wow6432Node\Company\Product, Name: MyValueName, Value: MyValue

但是,当我查看注册表时HKLM\Software\Wow6432Node\Company\Product,该值不存在。

4

2 回答 2

0

“...从以前的版本升级到最新版本时会出现问题”

既然是这种情况,我会:

  • 拆分 32 位和 64 位部分以使用两个不同的组件。这是可能的。
  • 将新组件的密钥路径设置为先前安装未设置的位置。换句话说:确保两个组件都有关键路径并且它们是不同的。
  • 为两个组件启用“重新评估组件条件”(传递组件)。这会在重新安装期间重新评估已安装组件的状况。换句话说,确定它们是要在系统上安装、重新安装还是删除。

如果重新安装时存在先前安装的组件密钥路径,则不会安装通过启用 64 位有效添加的新注册表项,因为组件仅作为一个整体安装或根本不安装。

于 2014-02-19T12:39:05.673 回答
0

提供的数据无法回答。也许安装程序中止并回滚。也许另一个组件复制了注册表数据并在以后更改了它。也许触发了自定义操作并重置了该值。甚至是作为引导程序一部分的另一个 MSI 踩到了它。

我需要花时间在 VM 上测试您的安装程序以确切了解发生了什么。据我所知,WriteRegistryValues 中没有系统性问题。

于 2013-10-23T21:03:54.657 回答