如果你編譯了乙個vc2008的預設的crt/mfc的應用程式,如果目標部署電腦上沒有安裝相應的vc2008的動態庫,當執行你的程式的時個,會出現如下錯誤資訊.
這是因為程式使用了基於vc2008的crt/mfc的動態庫版本.
解決這個問題,有三種方法:
1.使用靜態鏈結庫編譯(缺點,生成的exe的程式過於龐大)
2.使用vcredist_x86.exe / vcredist_x64.exe 將vc2008的發行版的dll安裝在你的系統上.(缺點,只能支援發行版,除錯版程式不能支援)
3.將你的程式依賴的crt/mfc的動態庫與你的程式一起發布(放在與你的發布程式同一目錄中)
第一種和第二種就不詳細講如何實現了,只要講第三種方法如何實現.優其是程式的開發是使用了vc2008 sp1的版本開發的程式.
在你的vc2008的安裝目錄下有兩個目錄,
只要將這兩個目錄下的檔案一同拷貝到發布程式的同一目錄下:
這些是這個程式依賴的發行版動態庫,同理,如果是除錯版的發布程式,也一樣把相應的除錯動態庫拷貝到相應目錄.
程式如你意執行起來了!
但是,如果你安裝的是vc2008 sp1的版本的時候,問題就來了,你的程式也一樣執行不起來了!
原因就是安裝了vc2008 sp1的時候,它把"vc/redist"用新的版本檔案代替了,問題不大,但是,這個程式的版本是依賴於新的manifest的檔案的,當你編譯vc2008-sp1的程式的時候,它同時把rtm-version寫入程式的manifest檔案中,這個是舊的rtm-version,不與新版本的vc2008-sp1的"crt/mfc"manifest版本一致,因此程式執行的時候是拒絕匯入這些新的vc2008-sp1的crt/mfc的運態庫!
解決方法有兩種.
方法一:
最簡單的,修改microsoft.vc90.crt.manifest和microsoft.vc90.mfc.manifest檔案,將新的版本號改為舊的版本號,如果是依賴其它的microsoft.vc90.*.manifest的檔案,也同樣是如此修改!
如果是裝了vc2008-sp1後,它的版本號是「9.0.30729.8″
未裝vc2008-sp1前的版本號為"9.0.21022.8"
過程如下:
將所依的動態庫的及它們的 manifest 檔案拷貝到發布應用程式的同一目錄下,並修改microsoft.vc90.*.manifest檔案,將
version="9.0.30729.1"修改為version="9.0.21022.8"
恭喜你,你的程式執行起來了!
方法二修改你的程式的所依賴的manifest,這樣程式會依整於新的manifest.
過程如下:
在stdafx.h
這個檔案中,增加如下巨集定義:
#define _bind_to_current_vclibs_version 1
程式編譯後就會依賴於新的manifest,版本號為
"9.0.30729.1"
無須再修改manifest檔案中的version版本號了.
將所依的動態庫的及它們的 manifest 檔案拷貝到發布應用程式的同一目錄下
恭喜你,程式又執行起來了!
注意:如果你是想要新的mfc-feature-pack的功能,用這種方法是最好的.
注意一點,非常重要,如果已經安裝了vcredist_*.exe程式包,注意的是dll會自動把引用調到系統目錄下的winsxs目錄下的,即不再引用同一目錄下的動態庫!
如果是編譯時使用了(/clr)這個編譯選項去支援.net開發,你必須要安裝.net framework redistributable包!
不過,在2010,編譯的程式會不再需要manifest檔案!
部署VC2008應用程式
如果你編譯了乙個vc2008的預設的crt mfc的應用程式,如果目標部署電腦上沒有安裝相應的vc2008的動態庫,當執行你的程式的時個,會出現如下錯誤資訊.這是因為程式使用了基於vc2008的crt mfc的動態庫版本.解決這個問題,有三種方法 1.使用靜態鏈結庫編譯 缺點,生成的exe的程式過於...
Vc 2008托盤氣泡程式
新建乙個mfc 對話方塊程式 新增成員變數 notifyicondata m 新增方法 bool setuptrayicon hwnd hwnd 上面的 新建乙個圖示在系統托盤處。當推出系統時刪除托盤圖示 bool removetrayicon 新增顯示氣泡方法 bool showtooltip l...
vc2008程式發布指南
vc2008程式發布指南 2008 05 03 17 46 vc2008開發的程式的發布方式可以有5種方式 1 不必重新發布vc2008基礎庫vcredist x86.exe 安裝到winsxs 2 不必產生,嵌入manifest.3 也不把vc2008基礎庫放在程式所在目錄.2.exe 嵌入man...