我正在使用 VS2015 为我的服务构建安装解决方案。我希望程序以 64 位运行。在解决方案配置属性中,我将所有项目作为配置 Debug、Platform Any CPU、Deploy 空白。
msi 安装程序要求我选择要安装的文件夹,然后我选择 Program Files\My Company Name
但是,当我尝试在 Windows 8.1 64 位操作系统上安装时,安装程序会创建一个文件夹 Program Files (x86)\My Company Name
为什么?
我正在使用 VS2015 为我的服务构建安装解决方案。我希望程序以 64 位运行。在解决方案配置属性中,我将所有项目作为配置 Debug、Platform Any CPU、Deploy 空白。
msi 安装程序要求我选择要安装的文件夹,然后我选择 Program Files\My Company Name
但是,当我尝试在 Windows 8.1 64 位操作系统上安装时,安装程序会创建一个文件夹 Program Files (x86)\My Company Name
为什么?
很可能是因为您生成的 MSI 是 32 位 MSI,它只能访问32 位文件夹路径。因此,操作系统会自动执行重定向。
您可以使用免费工具 Orca 检查 MSI 包类型,该工具可在 Windows SDK 中找到。MSI 的包类型信息可在“摘要信息”菜单中找到。或者您也可以生成详细的安装日志,您很可能会在其中找到有关路径重定向的信息。
生成详细日志的命令行:
msiexec.exe /i <完整的MSI路径> /L*V <完整的日志文件路径,包括日志文件名>
事实上,MSI 的“任何 CPU”意味着您获得了 32 位 MSI,它可以在 32 位和 64 位机器上运行。如您所想,64 位 MSI 无法安装在 32 位机器上。
Windows Installer 不支持混合 MSI 程序包。还有其他设置创作工具构建了一个 EXE 引导程序,它捆绑了两个 MSI,每个架构一个,并根据运行的操作系统启动正确的一个。
高级安装程序可以构建混合包,正如这个SO 相似/相关线程中所提到的。与任何开发工具一样,还有其他选项,请参阅上面链接的 SO 线程。
每种架构都需要不同的包:
在 Visual Studio 设置项目中,体系结构位于 TargetPlatform 选项中的属性窗口中(在解决方案资源管理器和 F4 中选择设置项目,而不是“属性”)。安装项目不遵循您在代码构建中所做的任何架构选择。
使用 ProgramFiles64Folder 作为 ApplicationFolder 属性(如 Heath 的文章所述)以安装到本机 Program Files 文件夹。