部署VC2008應用程式

2021-05-28 12:56:03 字數 1906 閱讀 5483

如果你編譯了乙個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...