解決“應用程序無法啓動,應用程序的並行配置不正確”

本文轉載於kingcham空間: http://hi.baidu.com/kingcham/blog/item/28fa43951b2b2112d31b70d9.html

應用程序事件日誌中:

“C:/windows/system32/test.exe”的激活上下文生成失敗。 找不到從屬程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。 請使用 sxstrace.exe 進行詳細診斷。

出現這類問題,是由於VC2005編譯出來的程序文件,採用了manifest方式來指定dll文件。對於win98、win2000系統,把exe文件和VC的 dll連接庫放到一起就成了。對於winxp、win2003系統就要麻煩的多了,VC的連接庫默認是被放到了winsxs目錄下。

解決辦法就是:使用vcredist_x86.exe再次分發程序

下載地址:(http://download.microsoft.com/download/7/9/8/798325b7-8993-4ef9-9148-8db9ff4187fc/vcredist_x86.exe

  1. 對解決方案來說,VS設置成debug版本和release版本是不一樣的。關鍵在於打包的時候的manifest所制定的路徑不同。
  2. 對於部署的程序,VS有兩套方案,共享並行程序集和私有程序集部署方法,前者其實就是依賴的東西在目標機的windows/winsxs目錄下,後者要求程序自帶
  3. 編譯程序的時候,主要設置在兩個地方,第一個是項目的general配置裏面的MFC,第二個是項目配置裏面的C/C++下面的Code Generation裏面的Runtime Library設置裏面。如果你的程序在修改過之後還能編譯的話,那就可以了。

 

今天在準備發佈用VS2005寫的那個程序時,拷貝到我同事機器上,雙擊突然出現了“由於應用程序的配置不正確,應用程序未能啓動,重新安裝應用程序可能會糾正這個問題“,這個問題很讓我意外,以前只出現過缺少DLL的情況,而這次出現這個問題,讓我一時沒辦法。想想,無非是兩個原因引起的,要麼是他沒有安裝VS2005的原因,要麼是我的程序裏依賴了其它的一些庫。於是百度一下,發現好多相關主題。我是按照這個帖子解決的:


在VS2005下用C++寫的程序,在一臺未安裝VS2005的系統上,
用命令行方式運行,提示:
“系統無法執行指定的程序”
直接雙擊運行,提示:
“由於應用程序的配置不正確,應用程序未能啓動,重新安裝應用程序可能會糾正這個問題”

以前用VC6和VS2003的話, 如果缺少庫文件,是會提示缺少“**.dll”,但是用VS2005卻沒有這樣的提示。

自己實驗了一下,感覺以下幾種解決辦法是可行的:
方法一:
在類似C:/Program Files/Microsoft Visual Studio 8/VC/redi
st/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT 下找到了下列文件:

msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest

把這幾個文件拷貝到目標機器上,與運行程序同一文件夾或放到system32下,就可以正確運行了。

其他release版、MFC程序什麼的都是拷redist下相應文件夾下的文件就可以了,文件夾後都有標識!

方法二:
修改編譯選項,將/MD或/MDd 改爲 /MT或/MTd,這樣就實現了對VC運行時庫的靜態鏈接,在運行時就不再需要VC的dll了。

方法三:

工程-》屬性-》配置屬性-》常規-》MFC的使用,選擇“在靜態庫中使用mfc”
這樣生成的exe文件應該就可以在其他機器上跑了。

方法四:

你的vc8安裝盤上找到再分發包vcredist_xxx.exe和你的程序捆綁安裝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章