Windows Installer日志显示添加的注册表项,但安装后在注册表中不存在

时间:2013-10-23 20:27:11

标签: windows-installer installshield installshield-2012

我正在使用的安装程序有一个组件,可以将注册表元素安装到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处查看注册表时,该值不存在。

2 个答案:

答案 0 :(得分:0)

用提供的数据回答是不可能的。也许安装程序中止并回滚。也许另一个组件重复了注册表数据并在以后进行了更改。可能是自定义操作已触发并重置该值。或者甚至另一个属于引导程序的MSI踩到了它。

我需要花时间在VM上测试安装程序,以确切知道发生了什么。我很清楚WriteRegistryValues中没有系统性问题。

答案 1 :(得分:0)

“......从上一个版本升级到最新版本时出现问题”

因为我会这样:

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

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