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