安装解决方案中x86和x64之间不兼容

时间:2010-04-07 10:48:36

标签: visual-studio windows-7 installer windows-server-2008 64-bit

我的安装解决方案包含安装程序项目(不是Web安装程序,而是简单的安装程序),它安装了NT服务,Web服务和网站,并附带了两个dll项目,并使用我自己的代码执行安装步骤。在安装程序项目的用户操作中,我调用其中一个项目的安装程序功能,此项目调用第二个项目的安装程序:installer - > MiddleCaller - > InstallationCore。

所有这些都是在Windows 7上开发的,当我用32位编译所有这些时工作正常。

项目必须在Windows 2008上运行。由于某些原因,所有项目必须都是x64位 为此,在MiddleCaller和InstallationCore中单击项目上的鼠标右键 - >构建 - >目标x64。要在安装程序的属性中将安装程序项目移动到64位(当项目处于活动状态时),请检查:目标平台:x64。

当我在x86上运行安装时,我收到错误:

The installation package is not supported by this processor type"

这很好,因为现在我知道我的安装是用64位编译的,但是当我在Windows 2008上运行时,我得到:

Error 1001. Exception occured while initializing the instance:  
System.BadImageFormatException: could not load file or Assembly   
'MiddleCaller, v...' or one of its dependencies. An attempt was  
made to load a program with an incorrect format.  

任何人都知道我需要做什么才能在x64上安装好运行?
可能我仍然没有将安装程序项目移动到x64位,如果是,我这样做了吗?

谢谢你。

3 个答案:

答案 0 :(得分:4)

在微软的网站上找到了一个快速提示,可能对troubleshooting setup and deployment projects有用:

  

64位托管自定义操作抛出System.BadImageFormatException异常

     

如果将64位托管自定义操作添加到安装项目,则Visual Studio构建过程会将32位版本的InstallUtilLib.dll作为InstallUtil嵌入到MSI中。反过来,加载32位.NET Framework以运行64位托管自定义操作并导致BadImageFormatException异常。

     

要解决此问题,请将32位InstallUtilLib.dll替换为64位版本。

     

从Windows Installer SDK中打开Orca中生成的.msi。

     

选择二进制表。

     

双击记录InstallUtil的单元格[二进制数据]。

     

确保选中“从文件名读取二进制文件”,然后单击“浏览”按钮。

     

浏览到%WINDIR%\ Microsoft.NET \ Framework64 \ v2.0.50727。

     

请注意   Framework64目录仅安装在64位平台上,对应于64位处理器类型。   选择InstallUtilLib.dll。

     

单击“打开”按钮。

     

单击“确定”按钮。

答案 1 :(得分:0)

在这种情况下有一些不清楚的事情。我知道您在运行调用64位程序集的32位安装程序时遇到困难。如果这是正确的,那么你不能做什么。您不能在同一进程中拥有32位和64位程序集 - 这是非法的。如果安装程序直接引用64位程序集,则安装程序也必须是64位。

作为澄清:我相信32位安装程序可以安装64位应用程序,但它可能只能通过复制64位文件而不是实际调用64位文件来实现。支持这种方法的唯一方法是将64位文件加载到不同的进程中并使用IPC调用它们,但即使这样也可能是一个糟糕的解决方案。

在您的情况下,我建议您将安装程序转换为64位安装程序。

答案 2 :(得分:0)

所以,最终,我在AnyCpu模式下编译了MiddleCaller和InstallationCore,当我需要安装的所有dll和可执行文件都是用x64位编译的时候。所有这些我在Windows 2008 x64位上编译,具有x64位外部依赖性(如Oracle客户端)。