如何在VS12下编译与win server 2003兼容的c# (xxxx.exe不是有效的win32应用程序)

本文关键字:exe xxxx 应用程序 win32 有效 VS12 编译 2003 server win | 更新日期: 2023-09-27 18:02:09

我在VS12/WIN7中有一个c#项目,但当我尝试在windows server 2003下运行它时,它会抛出一个错误,它不是一个有效的WIN32应用程序。我尝试了许多配置,也从配置管理器更改为任何Cpu,但它不起作用。这个项目有一些套接字和线程代码…

如何在VS12下编译与win server 2003兼容的c# (xxxx.exe不是有效的win32应用程序)

从对Ben的回答的评论来看,你的目标是。net 4.5。这是你的问题。问题是Windows Server 2003不支持。net 4.5。

因为你需要瞄准Server 2003,你需要瞄准一个支持该操作系统的。net版本。支持Server 2003的最高。net版本是。net 4。

所以你应该把Visual Studio中的项目设置改为。net 4。这篇MSDN文章描述了如何在Visual Studio中做到这一点。总之,您打开项目属性,导航到Application页面,并设置目标框架下拉菜单。

如果没有OP中提到的位问题,那么您必须检查针对您的项目的。net版本,并尝试在Windows server 2003上安装适当的版本。或者目标(如果可能的话)是在Windows server 2003机器上可用的。net版本。

尝试使用editbin更改所需的最低操作系统版本。这应该可以解决图像无法识别的问题;但是你以后可能会遇到其他问题。

例如:

EDITBIN myapp.exe /SUBSYSTEM:WINDOWS,5.01 /OSVERSION:5.1

注意:这并不能解决根本原因,因此不应将其视为最终解决方案。然而,这是确定故障是否由可执行头中的"最小要求的操作系统"字段引起的最佳方法。此外,通过继续检查进程的实际启动代码,它可能会发现可执行文件被标记为需要特定Windows版本的原因。


实际上,对于任何工具链来说,使用"最低要求的操作系统"字段都是一个坏主意,因为该字段的实际含义是"显示关于无效图像的消息"。包括XP在内的Windows版本的部署副本的数量使得恢复预期的意义是不可能的(用更好的错误信息修补所有这些版本是不可可行的)。

在应用程序启动时进行版本检查和有意义的错误消息要好得多。