将托管代码从x86迁移到x64平台时,我遇到了问题.我有一个WiX项目来创建一个MSI,它将通过Bootstrapper执行.
在x86平台上,文件将根据Project.wxs文件复制到"Program Files"中.但是如果通过Bootstrapper在x64平台上安装了相同的MSI,则默认情况下会将所有安装文件复制到"Program Files(x86)"中,并且应用程序的功能失败,因为它无法在12-hive层次结构中找到所需的文件.程序文件(对于64位,它是"C:\ Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG").
我尝试使用预处理器变量,如<?if $(var.ProcessorArchitecture)= x64?>,但我需要将项目属性中的此变量硬编码为x86或x64.最后,我最终为两个不同的平台提供了两个不同的MSI,这对我来说不是一个理想的解决方案.
那么,通过WiX,是否可以识别平台以确保在所需位置安装?
在64位平台上,SQL Reporting Services和加载项的安装检查失败.安装程序正在检查路径"HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Names"下的注册表项,并且注册表项可用,但由于MS SQL Server是64位应用程序,因此安装程序将重定向到路径"HKEY_LOCAL_MACHINE\Software\WOW6432node\Microsoft\Microsoft SQL Server\Instance Names"并且没有相同的条目.因此安装检查失败.
解决方法:我已经通过在"HKEY_LOCAL_MACHINE\Software\WOW6432node\Microsoft\Microsoft SQL Server\Instance Names\RS"下手动创建条目对其进行了测试,然后安装检查成功.
简而言之,在x64平台上,installed-check指的是来自WOW6432node的注册表项,而不是64位的注册表项.
那么,我如何强制我的32位安装程序访问64位注册表以进行正确的安装检查?
我已经尝试过RegDisableReflectionKey和相关函数作为注册表重定向的替代方法,但它在我的结束时不起作用.
我该如何解决这个问题?