用VS2012或VS2013在win7下編寫的程序在XP下運行就出現“不是有效的win32應用程序
問題描述:
用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應用程序