最近在處理項(xiàng)目問(wèn)題的的時(shí)候發(fā)現(xiàn)了這么一個(gè)問(wèn)題,就是我們的程序在調(diào)用第三方提供的dll文件的時(shí)候在一臺(tái)機(jī)器上面會(huì)報(bào)14001的錯(cuò)誤,但是在另一臺(tái)機(jī)器上面不會(huì)。兩臺(tái)機(jī)器上面的操作系統(tǒng)是相同的。針對(duì)這個(gè)問(wèn)題和這個(gè)錯(cuò)誤碼,查找了很多的相關(guān)資料。
vc錯(cuò)誤查找的給予的對(duì)于14001的錯(cuò)誤的解釋?zhuān)河捎趹?yīng)用程序配置不正確,應(yīng)用程序未能啟動(dòng)。重新安裝應(yīng)用程序可能會(huì)糾正這個(gè)問(wèn)題。
下面是搜集的一些網(wǎng)絡(luò)資料針對(duì)這個(gè)問(wèn)題的說(shuō)明和解決方法個(gè)人感覺(jué)還是很有參考意義的:
在VS2005下用C++寫(xiě)的程序,在一臺(tái)未安裝VS2005的系統(tǒng)上,用命令行方式運(yùn)行,提示:“系統(tǒng)無(wú)法執(zhí)行指定的程序”直接雙擊運(yùn)行,提示:“由于應(yīng)用程序的配置不正確,應(yīng)用程序未能啟動(dòng),重新安裝應(yīng)用程序可能會(huì)糾正這個(gè)問(wèn)題”
以前用VC6和VS2003的話, 如果缺少庫(kù)文件,是會(huì)提示缺少“**.dll”,但是用VS2005卻沒(méi)有這樣的提示。
自己實(shí)驗(yàn)了一下,感覺(jué)以下幾種解決辦法是可行的:方法一:在類(lèi)似C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dllmsvcp80d.dllmsvcr80d.dllMicrosoft.VC80.DebugCRT.manifest
把這幾個(gè)文件拷貝到目標(biāo)機(jī)器上,與運(yùn)行程序同一文件夾或放到system32下,就可以正確運(yùn)行了。其他release版、MFC程序什么的都是拷redist下相應(yīng)文件夾下的文件就可以了,文件夾后都有標(biāo)識(shí)!
方法二:修改編譯選項(xiàng),將/MD或/MDd 改為 /MT或/MTd,這樣就實(shí)現(xiàn)了對(duì)VC運(yùn)行時(shí)庫(kù)的靜態(tài)鏈接,在運(yùn)行時(shí)就不再需要VC的dll了。
方法三:
工程-》屬性-》配置屬性-》常規(guī)-》MFC的使用,選擇“在靜態(tài)庫(kù)中使用mfc”這樣生成的exe文件應(yīng)該就可以在其他機(jī)器上跑了。
方法四:
你的vc8安裝盤(pán)上找到再分發(fā)包vcredist_xxx.exe和你的程序捆綁安裝。
如果安裝Microsoft Visual C++ 2005 出現(xiàn)如下錯(cuò)誤↓:
事件查看器顯示:產(chǎn)品: Microsoft Visual C++ 2005 Redistributable -- Error 1935.安裝程序集“Microsoft.VC80.ATL,type="win32",version="8.0.50727.4053",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="x86"”過(guò)程中發(fā)生錯(cuò)誤。請(qǐng)參閱幫助和支持獲取詳細(xì)信息。HRESULT: 0x80070422。程序集接口: IAssemblyCacheItem,功能: Commit,組件: {97F81AF1-0E47-DC99-A01F-C8B3B9A1E18E}
解決方法:?jiǎn)?dòng) Windows Modules Installer 服務(wù),再安裝。OK,解決。
http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/66bc8cab-c134-49a8-85e5-37ca9efbdeb4/
個(gè)人問(wèn)題解決過(guò)程:
1.考慮的是兩個(gè)方面:
一個(gè)是程序調(diào)用的dll是否提供了所要的方法;
一個(gè)是dll所依賴(lài)的dll是否完整。這兩方面都是通過(guò)depends工具來(lái)查看
2.我的問(wèn)題是我用的是別人提供的dll文件自己不可以去更改dll文件的生成方式,因此所做的工作就是設(shè)法去導(dǎo)入dll所依賴(lài)的dll文件。
(1)配置系統(tǒng)環(huán)境變量的path路徑使dll做可能依賴(lài)的系統(tǒng)dll文件能夠找到依賴(lài)的dll。
(2)推測(cè)第三方所提供的dll開(kāi)發(fā)時(shí)候應(yīng)該用的是vs2005或者vs2008在或者就是vs2010,然后所提供的dll文件或許就是動(dòng)態(tài)加載的dll,所以安裝了vcredist_x86的vs2005,vs2008以及vs2010版本的,這個(gè)地方的操作對(duì)于我解決問(wèn)題起了作用,但是具體是哪一個(gè)這個(gè)沒(méi)有去確定
(3)為了使自己程序運(yùn)行的環(huán)境沒(méi)有必要都去安裝vcredist_x86所以找到vcredist_x86安裝之后對(duì)應(yīng)的dll文件和調(diào)用的第三方的dll放在同一個(gè)目錄下面,也可以放在C:\WINDOWS\system32但是path路徑中的配置一定要有,一般來(lái)說(shuō)都是會(huì)有的。
通過(guò)上面的三個(gè)方面?zhèn)€人的問(wèn)題是解決了,當(dāng)然具體到個(gè)人的項(xiàng)目里面還有很多的方面要考慮,但就這個(gè)dll加載的14001錯(cuò)誤,上面的解決方法還是ok的。網(wǎng)上的相關(guān)資料還是很多的,希望個(gè)人整理的這些對(duì)你有小小的幫助。針對(duì)vcredist_x86的dll文件以及vs2005,vs2008 和 vs 2010對(duì)應(yīng)的exe安裝文件可以搜一下,我也把我搜到的上傳一下,共享。
據(jù)其他網(wǎng)友推薦使用下面的方法
在Win7中運(yùn)行某些軟件時(shí),突然提示出錯(cuò)信息“應(yīng)用程序無(wú)法啟動(dòng),因?yàn)閼?yīng)用程序的并行配置不正確。有關(guān)詳細(xì)信息,請(qǐng)參閱應(yīng)用程序事件日志,或使用命令行sxstrace.exe工具?!?/p>
查看win7應(yīng)用程序事件日志:計(jì)算機(jī)——>右擊——>管理——>事件查看器——>應(yīng)用程序和服務(wù)日志
出現(xiàn)這個(gè)問(wèn)題是因?yàn)榘惭bwindows7 后,或使用ghost版本安裝后,windows7沒(méi)有安裝Visual C++ 庫(kù),而有些軟件需要Visual C++ 庫(kù)
所以到微軟官方網(wǎng)站下載:Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)下載:http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=zh-cn
有些軟件可能是VC2008開(kāi)發(fā)的,可以下載安裝Microsoft Visual C++ 2008,
Microsoft Visual C++ 2008下載地址如下:http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=zh-cn
另外建議下載Microsoft Visual C++ 2010 可再發(fā)行組件包 (x86),原因在于最新版本保持了向下兼容的特性:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=A7B7A05E-6DE6-4D3A-A423-37BF0912DB84
注意:安裝完了后,還需要重啟一下計(jì)算機(jī)。
還有一種情況是:所安裝的程序不支持WIN7系統(tǒng),請(qǐng)留意該版本的程序所支持的系統(tǒng)
比較方便的方法直接下載 VC Redist Installer
軟件名稱(chēng):VC Redist Installer(vc運(yùn)行庫(kù)) V1.6 英文免費(fèi)安裝版軟件大?。?7.7MB更新時(shí)間:2017-06-17由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動(dòng)等綠色軟件不能打開(kāi),一般都是缺少必要的vc運(yùn)行庫(kù)。VC Redist Installer由國(guó)外網(wǎng)友McRip制作,匯集VC2005、VC2008、VC2010、VC2012、VC2013運(yùn)行庫(kù),包含32及64位版本,安裝自動(dòng)判斷。這些運(yùn)行庫(kù)都采用Visual Studio 20XX編寫(xiě)的軟件必須使用公用DLL運(yùn)行庫(kù)。網(wǎng)上某些精簡(jiǎn)軟件沒(méi)有附帶這些公用DLL,會(huì)導(dǎo)致這些綠化軟件沒(méi)法正常運(yùn)行,出現(xiàn)“應(yīng)用配置不正確”錯(cuò)誤或者缺少msvcp71.dll、msvcr71.dll錯(cuò)誤,安裝對(duì)應(yīng)VC庫(kù)即可解決,這是最全最新的VC運(yùn)行庫(kù)的集合,安裝完本庫(kù)以后再使用綠色軟件、游戲就不會(huì)再出這個(gè)錯(cuò)了。
VC++運(yùn)行庫(kù)有什么用?
我們?yōu)槭裁匆褂盟??什么時(shí)候需要它?太深?yuàn)W的理論就不多說(shuō)了,舉個(gè)簡(jiǎn)單的例子,我們從網(wǎng)上下載來(lái)一些綠色精簡(jiǎn)軟件或個(gè)人軟件作品或某些游戲,運(yùn)行的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò),常見(jiàn)的有:缺少或丟失msvcp71.dll、msvcr71.dll、msvcrt.dll、msvcrt.dll等;無(wú)法啟動(dòng)此程序,因?yàn)橛?jì)算機(jī)中丟失 mfc*.dll。嘗試重新安裝該程序以解決此問(wèn)題。因?yàn)檫@些軟件是用采用Microsoft Visual Studio編寫(xiě)的,它們運(yùn)行的過(guò)程中必須使用公用的DLL運(yùn)行庫(kù),即上在所說(shuō)的VC運(yùn)行庫(kù)。
了解了原因之后,解決方法也就明白了,有兩種途徑:一是安裝Microsoft Visual C++運(yùn)行庫(kù)集成包;二是去網(wǎng)上尋找對(duì)應(yīng)版本的VC運(yùn)行庫(kù)DLL文件,然后再手動(dòng)復(fù)制到系統(tǒng)目錄里。前者肯定不行,那軟件太龐大了,沒(méi)有必要為了幾個(gè)運(yùn)行庫(kù)文件去下載上G的文件。后者太麻煩了,要去網(wǎng)上尋找,下載后還要自己手動(dòng)導(dǎo)入,而且32位和64位系統(tǒng)的導(dǎo)入目錄是不同的。
vc運(yùn)行庫(kù)包含組件:
現(xiàn)在好了,有了VC Redist Installer,一切就變得簡(jiǎn)單了,它內(nèi)置了全部的VC運(yùn)行庫(kù)DLL文件,其組件包括:匯聚以下組件庫(kù):- Visual C++ 2005 x86;- Visual C++ 2005 x64;- Visual C++ 2008 x86 9.0.30729.7523;- Visual C++ 2008 x64 9.0.30729.7523;- Visual C++ 2010 x86 10.0.40219.455;- Visual C++ 2010 x64 10.0.40219.447;- Visual C++ 2012 x86 11.0.60830.0;- Visual C++ 2012 x64 11.0.60830.0;- Visual C++ 2013 x86 12.0.21005.1;- Visual C++ 2013 x64 12.0.21005.1;- Microsoft Visual F Runtime 2.0;- Older Microsoft Runtimes for older software;注意/幫助:安裝過(guò)程可以自行選擇,并不是要全部安裝,在Windows 7下做了測(cè)試,全部安裝的話時(shí)間比較長(zhǎng)。需要說(shuō)明的是如果沒(méi)有開(kāi)啟Administrator超級(jí)用戶則需要右鍵“以管理員身份”運(yùn)行該軟件并執(zhí)行安裝!同時(shí),鑒于第三方軟件可能會(huì)誤報(bào),實(shí)屬正常,總之,放心使用即可!