2016-01-18 51 views
0

我有用C#编写的Windows窗体应用程序。它取决于NHibernate NuGet包,并且我还为这个应用程序编写了InstallShield安装包。所有这些都是在Visual Studio Community 2015中完成的。混淆与应用程序和安装程序

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

回答

1

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

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

请注意,setup.exe的位数和所包含的.msi包的位数无需匹配。

+0

哦,我认为这是我失踪的部分。所以一个32位的setup.exe可能仍然包含一个64位的.mis。这就说得通了。但有一点我仍然困惑:所以我现在可以安装我的应用程序的32位和64位版本(使用dumpbin验证),但它们总是以目标机器上的Program Files结尾。程序文件(x86)中不应该有32位程序吗? – Rabadash8820

+0

是的,但它听起来像是你已经创建了一个64位MSI包,在这两种情况下安装到ProgramFiles64Folder。 –

+0

好的。因此,要安装64位应用程序,我需要定位ProgramFiles64Folder并重建x64平台的解决方案。要安装32位应用程序,我定位了ProgramFilesFolder并重建了x86平台的解决方案。 – Rabadash8820