在Windows Installer(VS2008)中定位x86和x64

时间:2011-07-21 09:28:16

标签: c# visual-studio operating-system windows-installer target-platform

有没有办法使用Visual Studio 2008创建Windows Installer来同时定位x86和x64操作系统。

在TargetPlatform属性中,我只有:x86x64Itanium。而且我知道还有一个名为Any CPU的地方,但我找不到它。

另外,我不想创建两个安装程序。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:4)

可以完成,但不能直接使用Visual Studio。一般的方法是:

  • 创建包含32位和64位资源的通用MSI
  • 创建MST transforms(一个用于32位,一个用于64位),可根据目标平台修改MSI
  • 使用EXE引导程序动态检测平台并将正确的转换应用于MSI

您可以使用Orca创建转换。如果您需要商业解决方案,可以尝试使用Advanced Installer或InstallShield。

如果这看起来太复杂,您可以简单地使用单独的32位和64位软件包。

答案 1 :(得分:3)

可以完成,但不能使用VS安装程序。我有一位同事用InstallShield产品实现了这一目标,但是让我说这是一个绝对的黑客攻击,最后他得到了一个更好的结果,制作了两个不同的安装程序,每个目标位数一个。

我还需要启发你:

  

在TargetPlatform属性中,我只有:x86,x64,Itanium。我知道还有一个名为Any CPU的地方

TargetPlatform属性不会改变您正在安装的应用程序的位数,而是让它与程序集本身的目标平台混淆。 MSI是运载工具,其中的.Net组件是有效载荷。 MSI上的TargetPlatform设置不管理.Net程序集是如何编译的,而是用于帮助确定安装路径(如果设置为x86,则默认安装路径应为%PROGRAMFILES(x86)% ,并将针对不同的注册表配置单元。

答案 2 :(得分:1)

我可能错了,但我很确定无法做到这一点。 您提到的Any-CPU被.Net编译器用于您的程序集(.Net程序集默认为架构不可知,但可以强制编译为x86或x64)。 但由于windows-Installer是本机win32 exe,因此无法生成“Any-CPU”。 因此,您必须为x86和x64生成两个相同的安装程序。