2010-08-17 191 views
0

正在写入的注册表值在安装时在x64我需要写两个注册表值:64维克斯安装程序不Wow6432Node

1)<RegistryValue Root="HKLM" Key="SOFTWARE\Microsoft\Exchange" Name="Info" Type="string" Action="write" Value="8">

2)<RegistryValue Root="HKLM" Key="SOFTWARE\Wow6432Node\Microsoft\Exchange" Name="Info" Type="string" Action="write" Value="9"/>

我使用<?if $(var.PlatformName) = x64 ?>来检查我是否在x64上。

赢得7 64位它工作正常,但在XP 64位它将第二个键(“9”)的值写入第一个键的位置(我猜它覆盖了第一个键)。 任何想法为什么?或者我应该如何解决它?

回答

2

在.msi中执行此操作的正确方法是将这些注册表值分为两个单独的组件。两者都会引用密钥SOFTWARE\Microsoft\Exchange,但其中一个将是32位组件,另一个将是64位组件。请注意,包含64位组件的软件包必须具有64位模板摘要值,因此无法安装在32位计算机上。

0

我觉得首先你要明白,窗户上SOFTWARE\Wow6432Node由于注册表反射写入注册表值(这当32位安装程序试图注册表值写入SOFTWARE\或支持注册表反射任意键发生)。

当您在其父代Component上将win64属性设置为true时,可以禁用Registry element的注册表反射。

但是,作为最佳实践,建议为x64环境创建一个MSI,为x86环境创建一个MSI。

如果您想了解有关注册表反射的更多信息,可以查看下一个链接。