如果在x64上安装,我需要编写两个注册表值:
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。
在win 7 64位上它工作正常,但在xp 64位上它将第二个键(“9”)的值写入第一个键的位置(我猜它会覆盖第一个键)。 知道为什么吗?或者我该如何解决?
答案 0 :(得分:2)
在.msi中执行此操作的正确方法是将这些注册表值放在两个单独的组件中。两者都将引用键SOFTWARE\Microsoft\Exchange
,但一个是32位组件,另一个是64位组件。请注意,包含64位组件的程序包必须具有64位模板摘要值,因此无法安装在32位计算机上。
答案 1 :(得分:0)
我认为,首先您需要了解Windows由于注册表反射而在SOFTWARE\Wow6432Node
上写入注册表值(当32位安装程序尝试将注册表值写入{{ 1}}或任何支持注册表反射的键。
在您的父SOFTWARE\
上将win64属性设置为true时,可以为Registry element
禁用注册表反射。
但是,作为最佳实践,建议为x64环境创建一个MSI,为x86环境创建一个MSI。
如果您想了解有关注册表反射的更多信息,可以查看下一个链接。