2013-04-18 154 views
5

我有一个32位C#应用程序与目标x86安装程序。这个应用程序可以安装在x64机器上运行没有问题。但是,当我们安装在x64系统上时,来自供应商(已集成到软件中)的第三方硬件现在需要使用64位DLL。32位C#应用程序如何利用64位DLL

目前我已经把32位DLL和64位DLL放在我的项目中。但是目标x86安装程序显然不喜欢64位DLL。

我可以创建一个解决方案,我可以部署64位DLL和/或32位DLL,但仍然只有一个安装程序项目吗? (我看了第三方软件称为高级安装程序,但我不知道这是否会帮助我实现我需要的解决方案)

或者是否可以创建一个通用的安装程序项目?

注意:两个安装程序(x86与x64)部署不可行,因为我们有一个我不想重新定义的自动更新过程。维护一个MSI文件对我很重要。

建议非常感谢。

+1

你可以在NSIS中做到这一点。 – leppie

+3

这里真正的问题是,您将无法使用x86应用程序中的x64 DLL。 –

+6

您无法使用来自32位进程的64位DLL(反之亦然)。这部分是因为地址空间之间无法翻译。有关详情,请参阅[Raymond Chen的博客上的此帖](http://blogs.msdn.com/b/oldnewthing/archive/2008/10/20/9006720.aspx)。如果你想混合使用64位和32位,你必须有两个进程和一些进程间通信。 –

回答

0

安装从x86的文件MSI不与高级安装问题,下面的文章介绍了如何做到这一点: http://www.advancedinstaller.com/user-guide/qa-OS-dependent-install.html

另外,如果你有需要的同名DLL的​​两个版本要放在你应该看这里的文件夹中:http://www.advancedinstaller.com/user-guide/qa-install-file-with-same-name.html

但是,你应该首先检查你的应用程序是否可以正确加载x64 DLL,就像在他们的评论中提到的那样。

+0

他为什么要检查?该进程针对x86,这意味着它只有一个32位的进程。即使它被设置为“ANY CPU”,如果它引用一个32位的库,它也将是一个32位的进程。这也意味着它将无法加载任何64位库。 –

+0

我已考虑到此DLL可能由加密提到的第三方组件加载,而不是直接由他的x86应用程序加载。 –

相关问题