混淆应用程序和安装程序的位数

Confusion With Bitness of Application and Installer

我有一个用 C# 编写的 Windows 表单应用程序。它依赖于 NHibernate NuGet 包,我也在为这个应用程序编写一个 InstallShield 安装程序包。一切都在 Visual Studio 社区 2015 中完成。

这是我的困惑:如果我为 x64 构建应用程序,dumpbin 告诉我应用程序的 exe 是 64 位的,但是 NHibernate 的 DLL 和安装程序的 setup.exe 文件仍然是 32-少量。 32 位安装程序如何包装我的 64 位应用程序?为什么当我为 x64 构建时 NHibernate 没有变成 64 位,就像我认为 NuGet 包应该做的那样?最终问题:如果安装程序是 32 位的,我的应用程序在 x64 机器上是否仍然 运行 64 位?提前致谢!

32 位安装程序不会阻止您安装 64 位应用程序;在过于简单的层面上,所有安装所做的就是将文件或注册表项复制到位。

但是 Windows 安装程序很难或不可能将资源安装到 64 位位置,除非您使用 64 位软件包来安装它,例如从 64 位程序文件文件夹重定向回来到 32 位程序文件文件夹。也就是说,如果您的目标是 ProgramFiles64Folder 或 64 位注册表项,InstallShield LE 应该会自动创建 64 位程序包。

请注意,setup.exe 的位数和其中包含的 .msi 包的位数不必匹配。