1. 程式人生 > >用VS2012或VS2013在win7下編寫的程序在XP下運行就出現“不是有效的win32應用程序

用VS2012或VS2013在win7下編寫的程序在XP下運行就出現“不是有效的win32應用程序

font log cnblogs 找不到 gpo pro span pla 5.1

問題描述:

用VC2013編譯了一個程序,在Windows 8、Windows 7(64位、32位)下都能正常運行。但在Win XP,Win2003下運行時,卻報錯不能運行,具體錯誤信息為“指定的可執行文件不是有效的 Win32 應用程序”。

用VS2012或VS2013在win7下編寫的程序在XP下運行就出現“不是有效的win32應用程序

問題分析:

用eXeScope打開該exe,發現操作系統需求為“6.0”,即只能在Windows Vista或更高的操作系統下運行。

解決方法:

解決方法1:

項目-屬性-配置屬性-鏈接器->系統->子系統->控制臺或windows 後面的”最低版本“是5.01

技術分享圖片

解決辦法2:

1.用VC2013打開項目源代碼,選中項目,然後右鍵菜單裏點屬性打開項目屬性對話框;

2.在左側樹列表裏選擇 配置屬性->常規,然後在右側列表的“平臺工具集”選中“Visual Studio 2013 – Windows XP (v120_xp)”,再點擊確認。

改好後重新編譯,就能正常運行了。

此時再用eXeScope打開該exe,發現操作系統需求為“5.1”,即能在Windows XP或更高的操作系統下運行。

參考微軟的解釋

http://msdn.microsoft.com/zh-SG/library/jj851139.aspx

解決辦法3:

1.下載安裝升級包http://www.microsoft.com/zh-cn/download/details.aspx?id=39305

2.可以通過如下的操作實現:

1).在“Solution Explorer”中選中項目,然後右鍵菜單裏點屬性。

2).在Property Pages裏選擇Configuation Properties,選擇General,然後在Platform Toolset裏選中Visual Studio 2012 – Windows XP (v110_xp)即可。

技術分享圖片

這種方法的具體說明可參考:

http://www.cnblogs.com/hwangbae/archive/2012/11/27/2790637.html

把MFC的動態鏈接庫改成靜態鏈接庫:

此外,如果exe移植運行,不想在新計算機上查找和拷貝所依賴的MFC dll,可采用把MFC的動態鏈接庫改成靜態鏈接庫。方法如下:

解決辦法:
方案1.采用靜態編譯
使用VS2010編譯的程序在windows xp中運行時,經常會出現找不到相關的DLL文件,我們可以使用靜態編譯的方法把這些運行依賴文件打包到*.exe中來,以減少對環境的依賴。
一般可以配置以下兩項:
(1)項目 -> **屬性 -> 配置屬性 -> 常規 -> MFC的使用 :在靜態庫中使用MFC。

技術分享圖片

技術分享圖片
(2)項目 -> **屬性 -> 配置屬性 -> C/C++ -> 代碼生成 -> 運行庫 :多線程(/MT)。

技術分享圖片
方案2.

將mfc100.dll和應用程序一起打包發布,並在該包中加入安裝控件的說明文件
方案3.

將程序和vcredist_x86.exe一起打包發布(或提示用戶下載並安裝vcredist_x86.exe)
我想選擇方案1,方案2和3對於程序用戶來說來需要註冊,麻煩。(我就想要用方案1)

用VS2012或VS2013在win7下編寫的程序在XP下運行就出現“不是有效的win32應用程序