在Windows安装程序(VS2008)中同时针对x86和x64平台进行目标设置。

3
有没有办法使用Visual Studio 2008创建一个Windows Installer来针对x86和x64操作系统? 在TargetPlatform属性中,我只有:x86、x64、Itanium。 我知道还有另一个名为“Any CPU”的位置,但我找不到它。 此外,我不想创建两个安装程序。 有什么建议吗?谢谢。
3个回答

4
可以实现,但是不能直接使用Visual Studio。一般的方法如下:
  • 创建一个通用的MSI,其中包含32位和64位资源
  • 创建两个MST transforms(一个用于32位,另一个用于64位),根据目标平台修改MSI
  • 使用EXE引导程序动态检测平台并将正确的转换应用于您的MSI
您可以使用Orca创建转换。如果要使用商业解决方案,可以尝试Advanced Installer或InstallShield。
如果这看起来太复杂,您可以简单地使用独立的32位和64位软件包。

3
可以实现,但不能使用VS安装程序。我有一个同事用InstallShield产品实现了这一点,但是让我说一句,这是一个绝对的黑客行为,最后他得到了一个更好的结果,制作了两个不同的安装程序,一个针对每个目标位数。
我还需要启发你:
在TargetPlatform属性中,我只有:x86、x64、Itanium。我知道还有另一个被称为Any CPU的属性。
TargetPlatform属性不会改变你正在安装的应用程序的位数,你把它和程序集本身的目标平台搞混了。MSI是交付工具,其中的.Net程序集是载荷。MSI上的TargetPlatform设置并不管理.Net程序集如何JIT编译,而是用于帮助确定安装路径(如果设置为x86,则默认安装路径应为%PROGRAMFILES(x86)%,并且将针对不同的注册表信息)。

1

我可能错了,但我相当确定这是不可能完成的。 你提到的 Any-CPU 是由 .Net 编译器用于编译程序集(.Net 程序集默认是架构无关的,但可以强制编译为 x86 或 x64)。 但由于 Windows 安装程序是本机 win32 exe,所以它不能生成为“Any-CPU”。 因此,您必须生成两个完全相同的安装程序,一个用于 x86,另一个用于 x64。


1
你部分正确 - MSI 不是一个可执行文件,它实际上是一种数据库,由 msiexec.exe 读取和执行。(*如果 "MSI" 具有 .exe 后缀,则是一个包装 MSI 的引导程序,引导程序是编译代码,但可以在 64 位系统上运行而不会出现任何问题)。 - slugster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接