2013-05-09 303 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

相關問題