vc2008確實好使,不過缺陷也非常明顯,只要是它編譯的東西,在其他電腦經常會出現無法順利運行的情況,最常見的錯誤就是:“由于應用程序配置不正確,應用程序未能啟動。重新安裝應用程序可能會糾正這個問題。”
經過各種努力,最后發現,一般情況下只需要安裝一下vcredist_x86.exe這個vc的可重發行組件包就可以了。其主要原理是因為vc2008的版本比較高,其編譯時鏈接的相關dll版本比xp下的高太多,而我們在xp下運行的時候調用的是老版本的dll,所以出現了問題。安裝新版的可重發行組件包后,舊版本的dll被替換成新版本的,問題就解決了。
可是又出現了新的問題,總不能讓用戶使用我們軟件的時候,非要去安裝其他組件吧~~而且,其他很多軟件都是用vc開發的,這些軟件為什么不需要呢?本著鉆牛角尖的態度,進行了更深一步的探索;
最近研究ccv,突然發現ccv的bin目錄下有一個Microsoft.VC90.CRT目錄,下面有幾個dll文件,還有一個manifast文件。看到這個不禁眼前一亮,在我的程序中把這幾個文件打包進去就ok了吧?于是進行嘗試,查找本機安裝vs2008目錄下的Microsoft.VC90.CRT目錄一頓cp,結果,很沮喪,測試失敗~~告一段落~~
某天又在網上發現有人在帖子里的回答,其中兩個字吸引了我:“版本”。我靈機一動,趕緊去查看版本,發現我當前的版本是9.0.30729.4148,而帖子里的manifast文件中的版本是9.0.21022.8。于是,我趕緊找了一個這個版本的下載下來,替換我的程序中的這幾個dll和manifast,再運行,果然成功了。
因此得到以下結論:
1、可重發行組件包是沒問題的,肯定可以用,因為它替換了系統的這幾個dll,所以可行;
2、如果不想在自己的“綠色”軟件的基礎上再要安裝這么個組件,或者自己的非綠色軟件在安裝的過程中再安裝這么個組件,只需要處理這幾個關鍵的dll就行啦。
3、即使有了這幾個dll也不一定行,一定要注意版本!實在不行這幾個版本多試一試。我到現在還不太明白,我的vs2008的版本是9.0.30729.4148,編譯出來的東西應該也是這個版本的啊,可是為什么用了老版本才好用,新版本的反而不好用呢?
4、具體文件如下:
Microsoft.VC90.CRT.manifest
msvcm90.dll
msvcp90.dll
msvcr90.dll