VS2005 以 Use MFC in a Shared DLL 編譯的原生 C++ 程式,在乾淨的 Windows XP / Server 2003 執行,彈出:
「應用程式組態不正確,應用程式因此未能啟動。重新安裝也許會解決此問題。」
將 MFC 相關 DLL(如 MFC80.DLL、MSVCR80.DLL)複製到程式目錄無效。
VS2005 引入 Side-by-Side (SxS) 組件模型,執行檔內嵌 Manifest 描述相依組件版本(如 Microsoft.VC80.CRT version 8.0.50727.XXXX)。作業系統載入器依 Manifest 到 WinSxS 組件存儲區尋找對應版本,不再單純搜尋 PATH 目錄下的 DLL。乾淨系統缺少對應的 SxS 組件導致載入失敗。
執行 vcredist_x86.exe,安裝 CRT/MFC/ATL 等 SxS 組件到系統存儲區。
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe專案屬性 → Configuration Properties → General → Use of MFC → Use MFC in a Static Library
Configuration Properties → C/C++ → Code Generation → Runtime Library → /MT (Release) / /MTd (Debug)
std::string、FILE*、new/delete 必須同一 CRT)將完整 SxS 組件目錄(含 Manifest、DLL、Catalog)置於應用程式資料夾,需嚴格遵循 SxS 目錄結構命名規範。