2013-05-09 309 views
9

我正在使用Visual Studio 2012 Professional并使用高级安装程序(第三方)创建安装程序。.exe在Windows XP上不是有效的Win32应用程序

当我运行在Windows XP上安装的.exe文件,我得到以下信息:

<APPNAME>的.exe不是有效的Win32应用程序。

安装的可执行工作正常的Windows 7和8

我怎样才能让程序在Windows XP上运行两者兼而有之?

+0

它可能正在寻找.NET 4.5框架,它不在Win XP机器上。 – 2013-05-09 06:41:43

+1

@AlexBell可能,或者它可能是一个架构问题。这个.exe是编译为x86还是x64? – Adrian 2013-05-09 07:11:11

+0

如果可能,重定向您的应用程序以使用Net Framework 4.0 – Steve 2013-05-09 07:11:18

回答

16

从Visual Studio命令提示符,运行以下命令:

Dumpbin.exe /headers c:\where\you\put\it\setup.exe 

其中的 “setup.exe” 是由安装创建者创建设置EXE。我会发布一个您看到的重要信息示例:

OPTIONAL HEADER VALUES 
      10B magiC# (PE32) 
      ... 
      4.00 operating system version 
      0.00 image version 
      6.00 subsystem version    // <=== here!! 
       0 Win32 version 
      ... 

子系统版本号很重要。 VS2012是Visual Studio的第一个版本,它开始将此值设置为Vista的版本号6.00。以前的版本以及针对.NET 4.0或更早版本的VS2012会将此版本号设置为4.00

这是另一项重要举措,也是逐步淘汰XP支持的一部分。 Windows版本6.00及以上,Vista,Win7和Win8注意这个数字。他们会认为你的程序不知道后面的Windows功能,需要打开几个appcompat垫片。最值得一提的是Aero中的appcompat,这是一个桌面主题,它显示带有胖框架的窗口,这些框架很容易用鼠标点击。 Windows会对这些边界说谎,告诉你你的窗口比实际的窗口小。对于那些试图让Windows彼此对齐的程序员来说,这是一个很大的混乱。

看到显示6.00的结果是您的安装程序无法在XP上运行。它是版本5.02。

因此,请确保首先确定您的目标是而不是目标.NET版本4.5,但它不适用于XP。改用4.0。如果仍然有问题,请联系供应商的支持,并询问他们如何在该工具创建的setup.exe文件中控制该编号。解决方法是使用/ SUBSYSTEM选项运行Editbin.exe以更改编号。

+0

使用Windows Server 2012,我发现editbin.exe是无益的。在我的解决方案中,使用IExpress.exe(system32版本),我将一个Install.msi包装在带有frameworknet40的setup.exe中。虽然每个DLL都是用x86编译的,包括Install.msi,但IExpress会将机器设置为x64(结果来自dumpbin.exe中的FILE HEADER VALUES)。只有当我在Win XP 32位机器上使用IExpress.exe时,才能够创建有效的setup.exe。 – JDennis 2014-01-13 14:25:35

0

我对Visual Studio相当陌生,因此我不确定最近是否添加了以下选项 ,但Visual Studio 2013具有向后兼容性选项,可将 Win_XP并入目标列表中。下面的图片可以帮助:

Visual Studio Configuration


,然后当我运行dumpbin命令,我得到下面的结果。

enter image description here


所以,现在的应用程序,一般情况下,可以在Windows XP上运行。
希望这有帮助。

+1

图片遗失!!! – 2015-07-09 11:33:27

+0

@VidiyaPrasanth:不知道你的意思;-)我可以看到他们晶莹剔透.. – sjsam 2015-07-09 12:08:24

+0

谢谢,这帮助我(建立一个微小的基于C语言的exe)。也许你可以编辑你的答案来解释文本中的设置,以防有人看不到图像。 – 2015-07-10 02:30:33

相关问题