日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
——更新于2011/4/19,針對最新的VS2008補丁,VS2005/2010同樣適用。

VC9編譯的程序在沒有裝過VC9(確切的說是.Net Framework3.5)的機器上運行時,如果提示“由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動。重新安裝應(yīng)用程序可能會糾正這個問題。”這個錯誤,那么就說明該程序動態(tài)鏈接了VC9的運行時庫,(如果還用到了MFC,那么可能動態(tài)鏈接了VC9的MFC庫,同理還有ATL庫),以及缺少對應(yīng)的manifest文件,程序在目標(biāo)機器上沒有找到這些庫和配置文件,因此導(dǎo)致了這個錯誤。出現(xiàn)這種情況的VC9編譯器可能存在多個版本,接下來分別闡明:

1、沒有打過任何補丁的VS2008
該版本對應(yīng)的CRT/MFC/ATL庫的版本號為9.0.21022.8,這個版本號在后面會用到。這個版本的程序部署比較簡單,直接把VC安裝目錄下的redist目錄(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,這樣程序到任何機器上都能夠正常運行了。

2、打過SP1補丁的VS2008
打過該補丁后,系統(tǒng)中存在著兩個版本的CRT/MFC/ATL庫,版本號分別為9.0.21022.8和9.0.30729.1,這導(dǎo)致了manifest文件中記錄的版本號和實際庫的版本號不一致(程序要求它們的版本號一致才能運行)。這個版本的程序部署需要兩個步驟,首先要使manifest文件中依賴項的版本號與實際庫的版本號一致,均為9.0.30729.1,方法是在工程設(shè)置中增加一個宏定義_BIND_TO_CURRENT_VCLIBS_VERSION,該宏定義于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新編譯程序。接下來還是將VC安裝目錄下的redist目錄(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,然后修改manifest文件中依賴項的版本號為9.0.21022.8,這樣使得程序誤以為該目錄下庫的版本號為9.0.21022.8(實際上是9.0.30729.1版本),這樣程序到任何機器上都能夠正常運行了。

3、打過SP1補丁與SP1 ATL 安全更新 (KB973675)的VS2008
在SP1補丁之后,微軟又于近日發(fā)布了一個用于智能設(shè)備的 Microsoft Visual Studio 2008 Service Pack 1 ATL 安全更新 (KB973675), 該補丁又將CRT/MFC/ATL庫的版本號升級,為9.0.30729.4148,這次升級比較好,manifest文件與庫的版本號一致了,不像SP1一樣升級的不徹底。這樣只需要在工程設(shè)置中增加一個宏定義_BIND_TO_CURRENT_VCLIBS_VERSION,接下來重新編譯程序,然后直接把VC安裝目錄下的redist目錄中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,這樣程序到任何機器上都能夠正常運行了。


4、繼3之后又打過SP1安全更新(KB2465361)與SP1 Redistributable Package 的安全更新 (KB2467174)的VS2008
這是最新的更新(2011/4/12)。微軟于近日針對VS2005/VS2008/VS2010發(fā)布了一套用于修復(fù)MFC安全漏洞的補丁,對應(yīng)VS2008的補丁是Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package 的安全更新 (KB2467174)和Microsoft Visual Studio 2008 Service Pack 1 安全更新 (KB2465361),這樣CRT/MFC/ATL庫的版本號又升級為9.0.30729.55710。修復(fù)方法同第3點。

需要注意的是,安裝完補丁后需要rebuild工程,不要忘了先rebuild工程所依賴的lib/dll工程。build完成后可以到中間文件目錄(一般是Debug/Release)打開xxx.exe.intermediate.manifest或xxx.dll.intermediate.manifest文件(xxx是你的工程名)查看程序所依賴的CRT/MFC/ATL庫的版本號是否是最新的或你期望的,如果出現(xiàn)依賴同一個庫的兩個版本的情況,那么就說明該工程依賴的某個lib或dll工程還沒有重編或沒有增加_BIND_TO_CURRENT_VCLIBS_VERSION宏定義;如果同一個庫只依賴一個版本,并且該版本號正確,那么恭喜你,你的程序肯定能夠運行在所有機器上。

順便提一下,如果不想在發(fā)布程序時帶上這些庫和manifest文件(如果沒有必要的話),那么可以采用靜態(tài)編譯CRT和MFC,然后把manifest文件添加到資源中,這樣編譯出的程序只要一個exe就可以在任何機器上直接運行了。

參考文章:
1、“應(yīng)用程序配置不正確,程序無法啟動”的解決方法資料收集:http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html

?

轉(zhuǎn)載于:https://www.cnblogs.com/wondering/archive/2009/08/29/vs2008_deploy_problem.html

總結(jié)

以上是生活随笔為你收集整理的【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。