如何编写32位和64位安装程序

9
我有一个.NET应用程序,可以在32位和64位系统上运行。 我想编写一个单一的安装程序,无论平台如何,都将安装到c:\program files,而不是c:\program files(x86)。
从这个链接中: http://msdn.microsoft.com/en-us/library/w1behyzx(v=VS.90).aspx 看起来似乎不可能。这是真的吗?
4个回答

9
根据如何:为64位平台创建Windows安装程序
要将.NET Framework应用程序分发到32位和64位平台,构建两个MSI包,一个针对32位计算机,另一个针对64位计算机。用户可以安装32位设置项目包,并且它很可能作为64位应用程序运行,只有64位设置项目将安装到“Program Files64”目录。
不是最好的体验,但可行。
更新:人们通常处理他们想避免两个安装程序包的愿望的方法是生成一个设置可执行文件,它打包了两个安装程序并在运行时选择正确的安装程序。
您可以自己创建一个快速的C#(尽管现在您有在没有.NET的计算机上引导它的问题。是的,还有这样的计算机吗?:-))或C++可执行文件,检测它运行的平台并使用适当的.msi从可执行文件资源中提取或从网站下载启动msiexec进程。
或者这个SO问题的已接受答案简要谈到了这一点,并提到了一个名为Advanced Installer的第三方工具,可以帮助你解决这个问题。请注意,我没有尝试过这个工具,也不能保证它的可靠性,只是提供参考;你需要自行评估它。 :-)

+1:你比我更快地找到了链接。我也打算回答同样的问题。 - IAbstract
这正是我想要避免的:两个不同的msi包。 - tom greene
我完全理解你的愿望,但仅仅因为你渴望某些东西,并不能使其更可行。至少在使用MSI时不行。你可以考虑其他安装程序引擎,但这样你就有风险,那个安装程序引擎可能无法正确遵循所有操作系统指南。 - Franci Penov
如果你说这是不可能的,我会接受它。让我们看看是否有人能想出一个解决方案。如果没有,你的答案将是正确的。 - tom greene
可以有一个部署包,但不能只有一个MSI。您的包将需要是一个自定义的.exe文件,它打包了两个MSI并在执行时选择正确的一个。 - Franci Penov

1
如果您的应用程序可以在32位和64位系统上运行,那么它是32位的,因此应该放在(x86)文件夹中。

2
不正确。如果在构建 .Net 应用程序时未指定目标架构,则会将其编译为与架构无关的 IL 程序集。当用户在计算机上启动此类应用程序时,CLR 会即时将其编译为在其上运行的平台的本机机器代码。在 32 位操作系统上,它将被 JIT 编译为 32 位应用程序,但在 64 位操作系统上,它将被 JIT 编译为 64 位应用程序。 - Franci Penov
我刚准备要发表这个,但是Penov抢先了我。 - wtaniguchi
1
啊哈,我不知道这一点,一直以为在64位和32位上运行的任何东西都只是在64位架构上以32位仿真方式运行,这就是为什么它们被分开的原因。我会保留这个回复,这样你的评论就可以被看到了。 - Daniel DiPaolo

0

这个链接 http://msdn.microsoft.com/en-us/library/cd7a85k9%28v=VS.90%29.aspx(你发布的链接中引用的)有这样一段内容:将文件安装到一个64位平台上的Common Files、Program Files或System文件夹中。

只要你针对x64平台并且没有任何仅限于x86库的引用,这应该会帮助你解决问题。


0

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