簡體   English   中英

Visual Studio 2010 Win32 App無法在Windows XP上啟動

[英]Visual Studio 2010 Win32 App won't start on Windows XP

我必須編寫一個具有一些特定要求的簡單應用程序:
1.它應該只包含一個exe文件,沒有安裝程序或外部DLL。
2.應該小
3.它應該可以在任何Windows(Win32)平台上運行(至少在Windows XP上),而無需對Windows安裝進行任何修改(不依賴於.NET,JVM,MFC或Visual Studio可再發行組件)
4.它應該有一個簡單的(基於對話框的)UI

我決定將其作為C(C ++)中的簡單Win32應用程序進行,並且僅使用標准的win32 api,沒有花哨的東西。 我在64位Windows 7上使用Visual Studio 2010創建了該項目,並將運行庫從多線程DLL更改為僅多線程。 我認為這將產生與Windows兼容的應用程序。

編譯后的應用程序可以在Windows 7上正常運行,但無法在任何Windows XP PC上啟動它。 我在Windows XP SP2和SP3上都嘗試過。 奇怪的是,我在活動管理器中沒有收到任何錯誤消息,也沒有惡意程序,雙擊exe文件時什么也沒發生。 並且沒有產生DrWatson日志。

我已經在項目設置中檢查了目標計算機,它是MachineX86。

我已經在這個問題上搜索了很多,一個提示是修改targetver.h,但我沒有結果。 這就是我的targetver.h現在的樣子:

#include <WinSDKVer.h>
#define _WIN32_WINNT      _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>

我也嘗試過依賴項遍歷器,但是它只顯示並加載名為DWMAPI.DLL的延遲加載的DLL並顯示錯誤,該DLL似乎是Vista DLL。 並且還警告其他兩個延遲加載的DLL,MPR.DLL和SHLWAPI.DLL。 但是由於它們是延遲加載的,並且我認為我在其中不使用任何東西,所以沒關系(在其上進行搜索顯示應忽略這些警告)。

我的目標是能夠編譯一個可以在XP計算機上運行的exe,而無需對其進行任何修改。

我解決了問題。 當我說我像沒有花哨的東西的普通Win32那樣做時,那不是完全正確的。 在現代操作系統上運行時,我不希望出現XP之前的外觀和感覺,因此我在stdafx.h中添加了以下幾行(遵循我在網上找到的提示):

#define ISOLATION_AWARE_ENABLED 1
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

我之所以沒有提及,是因為我已經嘗試刪除了這些行,但是仍然沒有用(而且我仍然不明白為什么在刪除那些行時它不起作用,我嘗試了更多不止一次)。

但是,在對MSDN文章進行了更多閱讀之后,我發現這些行必須在包含windows.h之前,所以我將其移動,現在它可以工作了(包括經典和xp樣式)

所以問題似乎是我在windows.h包含的錯誤一側更改為ComCtl32的版本6,但是我仍然不知道為什么在刪除這些行時它不起作用。 Windows可以某種方式緩存清單嗎?

也許您在XP計算機上需要此: MSVC 2010運行時

嘗試創建一個靜態鏈接到C運行時庫的程序。

在解決方案的項目中執行以下操作: 配置| C / C ++ | 代碼生成| 運行時庫。

發行:將/ MD更改為/ MT,多線程。 調試:將/ MDd更改為/ MTd,調試多線程。

如果要繼續使用動態鏈接,請按照@dbrank()的建議將MSVC ++運行時文件復制到XP計算機中。 但是,您在原始帖子中說過,您想要一個沒有復制其他文件的獨立.exe。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM