我们如何在 64 位 Windows 服务器上运行 .NET 32 位应用程序?
我们正在一台 64 位 Windows 服务器中安装第三方应用程序。 该应用程序显然是使用设置为在运行时选择平台的编译器选项构建的。 当我们运行应用程序时,它会给我们一个错误:
System.BadImageFormatException: is not a valid Win32 application.
我在 MSDN 论坛中看到,为了修复此错误,我必须将应用程序构建为 32 位,这样它就可以在 64 位服务器上正常运行。 我查看了其他 StackOverflow 链接其他帖子。
如何解决这种情况? 对于每个想了解更多信息的人:
- 该应用程序在 32 位测试服务器中运行良好。
- IIS 版本 6
- 使用 SQL Server Express 2005 的
- 在 Web 服务扩展上有 Framework64\v2.0.50727\aspnet_isapi.dll
- 和 Framework\v2.0.50727\aspnet_isapi.dll
We are installing a third party application in one of our 64-bit Windows servers. This application apparently was build with the compiler option set to choose the platform at run time. When we run the application it gives us an error:
System.BadImageFormatException: is not a valid Win32 application.
I have seen in MSDN forums that in order to fix this error I have to build the application set to 32-bit, and that way it will run fine on a 64-bit server. I check on other StackOverflow links Other Posts.
How to get around this situation? For everyone that wants to know more information:
- The application is running fine in a 32-bit test server.
- IIS version 6
- using SQL Server Express 2005
- On the Web Service Extension there are both Framework64\v2.0.50727\aspnet_isapi.dll
- and Framework\v2.0.50727\aspnet_isapi.dll
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
一种可能性是应用程序依赖于需要在 32 位模式下运行的非托管 DLL。 由于默认的“AnyCPU”.NET 构建会自动检查平台,因此程序的.NET 部分以 64 位模式启动。 这将导致对仅 32 位非托管 DLL 的调用失败。
要修复此问题,您需要创建一个清单文件来告诉应用程序以 32 位模式运行。 我从来不需要自己这样做,所以我无法提供说明,并且快速谷歌搜索还没有发现任何内容。
[更新]
看看这个链接是否有帮助:
http://msdn.microsoft.com/en-us/library/aa374191。 ASPX
One possibility is that the application depends on an unmanaged DLL that needs to be run in 32-bit mode. Since the default "AnyCPU" .NET build checks the platform automatically the .NET part of the program is starting in 64-bit mode. This will cause the calls to the 32-bit-only unmanaged DLL to fail.
To fix it, you need to create a manifest file to tell the app to run in 32-bit mode. I've never needed to do that myself, so I can't provide instructions and a quick Google search hasn't (yet) turned up anything.
[Update]
See if this link helps:
http://msdn.microsoft.com/en-us/library/aa374191.aspx
我不确定这是否有帮助,但请检查一下:
http://msdn.microsoft.com/en-us /library/ms164699(VS.80).aspx
I'm not sure this will help, but check it out:
http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx
这个问题的细节有点令人困惑,但我会赌一把。
您需要在运行此代码的网站的 Framework\v2.0.50727\ 文件夹中找到 aspnet_regiis.exe 版本
The details of the question is a little confusing but I'll take a punt.
You need to the version aspnet_regiis.exe found in the Framework\v2.0.50727\ folder against the web site where this code is running
可能有效的一件事是通过更改目标 CPU 详细信息来确保 .Net 应用程序被标记为真正的 32 位应用程序。
在 Visual Studio 2005 中,您可以通过转到项目属性并在构建部分中设置平台目标来完成此操作em> 到 x86,而不是默认的任何 APU。
One thing that might work is making sure the .Net application is flagged as a true 32 bit application by changing the target CPU details.
In the Visual Studio 2005 you can do this by going to the project Properties and in the Build section set the Platform Target to x86 and not Any APU which is the default.