当我 select Program Files 时,为什么我的服务安装项目安装到 Program Files (x86)?

Why is my service install project installing to Program Files (x86) when I select Program Files?

我正在使用 VS2015 为我的服务构建安装解决方案。 我希望程序 运行 为 64 位。 在解决方案配置属性中,我将所有项目配置为调试、平台任意 CPU、部署空白。

msi 安装程序要求我 select 一个要安装的文件夹,我 select 程序 Files\My 公司名称

然而,当我尝试在 Windows 8.1 64 位 OS 上安装时,安装程​​序会创建一个文件夹 Program Files (x86)\My Company Name

为什么?

很可能是因为您生成的 MSI 是 32 位 MSI,它只能访问 32 bit folder paths。因此,OS 自动执行重定向。

您可以使用Windows SDK 中的免费工具Orca 查看MSI 包类型。 MSI 的包类型信息可在摘要信息菜单中找到。或者您也可以生成详细的安装日志,很可能您会在其中找到有关路径重定向的信息。

生成详细日志的命令行:

msiexec.exe /i < full MSI path > /L*V < full log file path, including log filename >

事实是 "Any CPU" 对于 MSI 意味着您获得 32 位 MSI,它可以 运行 在 32 位和 64 位机器上。 64位微星无法安装在32位机器上,你可以想象。

Windows 安装程序不支持 混合 MSI 包。还有其他设置创作工具构建了一个 EXE 引导程序,它捆绑了两个 MSI,每个架构一个,并根据 OS 运行 启动正确的一个。

Advanced Installer can build mixed packages, as also mentioned in this SO similar/related thread。与任何开发工具一样,还有其他选项,请参阅上面链接的 SO 线程。

每种架构需要不同的包:

https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

在 Visual Studio 安装项目中,体系结构位于 TargetPlatform 选择中的属性 windows(解决方案资源管理器和 F4 中的 select 安装项目,而不是 "Properties")。安装项目不遵循您在代码构建中可能做出的任何体系结构选择。

使用 ProgramFiles64Folder 作为 ApplicationFolder 属性(如 Heath 的文章所述)以安装到本机 Program Files 文件夹。