找不到dll問題之第二課《Visual C++運(yùn)行庫篇》
關(guān)于VC運(yùn)行庫網(wǎng)上很多一鍵修復(fù)工具,如:
DirectX Repair,缺點是很久沒更新,不包含vc2015-2022新版;
微軟常用運(yùn)行庫合集,有很多人制作過,如“微軟常用運(yùn)行庫合集 Dreamcast”、“微軟Visual C++運(yùn)行庫 nanlon”等。
除了上面的一鍵修復(fù)工具,還可以在微軟官網(wǎng)下載各版本的VC運(yùn)行庫安裝。搜索“最新受支持的 Visual C++ 可再發(fā)行”或“最新可再發(fā)行”,可以找到官網(wǎng)下載頁。

下載頁包含了所有非Debug版的VC運(yùn)行庫,點擊要下載的版本可以看到下載地址。

VC運(yùn)行庫的dll,一般是“ msvc*數(shù)字*.dll ”、“ mfc*數(shù)字*.dll ”、“ vc*數(shù)字.dll ”這樣格式的。而名稱結(jié)尾帶d的是debug版運(yùn)行庫,網(wǎng)上一般下載不到,需要安裝對應(yīng)的visual studio版本才會附帶。
所有的VC運(yùn)行庫都不需要也不能用regsvr32命令注冊。

一.VC2005運(yùn)行庫,版本號數(shù)字80,大致包含下面dll。
vcomp.dll、msdia80.dll、ATL80.DLL
msvcm80.dll、msvcp80.dll、msvcr80.dll
mfc80.dll、mfc80u.dll、mfcm80.dll、mfcm80u.dll
mfc80CHS.dll(CHS、CHT、DEU、ENU、ESP、FRA、ITA、JPN、KOR)
除了msdia80.dll在Common Files\Microsoft Shared\VC路徑,其余dll均在winsxs文件夾里。
安裝vc2005時可能遇到的錯誤:
Command line option syntax error. Type Command /? for Help.
原因是用戶文件夾或臨時目錄路徑有中文等特殊字符。幾個解決方法:先解壓一遍exe再打開解壓后的文件安裝;修改用戶環(huán)境變量temp和tmp指向純英文路徑;修改中文用戶文件夾為純英文。

? 2.Error 1935.安裝程序集 xxx 過程中發(fā)生錯誤。

上圖的原因是禁用了Windows Modules Installer(TrustedInstaller)服務(wù)導(dǎo)致,其余原因看cbs.log日志說不定有具體錯誤描述。
Visual C++運(yùn)行庫里,只有VC2005和VC2008會出現(xiàn)安裝程序集錯誤。

二、VC2008運(yùn)行庫,版本號數(shù)字90,大致包含下面dll。
vcomp90.dll、msdia90.dll、ATL90.DLL
msvcm90.dll、msvcp90.dll、msvcr90.dll
mfc90.dll、mfc90u.dll、mfcm90.dll、mfcm90u.dll
mfc90CHS.dll(CHS、CHT、DEU、ENU、ESN、ESP、FRA、ITA、JPN、KOR、RUS)
跟上面的vc2005差不多。

二、VC2010運(yùn)行庫,版本號數(shù)字100,大致包含下面dll。
vcomp100.dll、msdia100.dll、ATL100.DLL
msvcp100.dll、msvcr100.dll
mfc100.dll、mfc100u.dll、mfcm100.dll、mfcm100u.dll
mfc100CHS.dll(CHS、CHT、DEU、ENU、ESN、FRA、ITA、JPN、KOR、RUS)
除了msdia100.dll跟上面的一樣,其余dll均在system32或syswow64目錄。

三、VC2012運(yùn)行庫,版本號數(shù)字110,大致包含下面dll。
vcomp110.dll、vcamp110.dll、vccorlib110.dll、ATL110.DLL
msvcp110.dll、msvcr110.dll
mfc110.dll、mfc110u.dll、mfcm110.dll、mfcm110u.dll
mfc110CHS.dll(CHS、CHT、DEU、ENU、ESN、FRA、ITA、JPN、KOR、RUS)
所有dll都在system32或syswow64目錄。

四、VC2013運(yùn)行庫,版本號數(shù)字120,大致包含下面dll。
vcomp120.dll、vcamp120.dll、vccorlib120.dll
msvcp120.dll、msvcr120.dll
mfc120.dll、mfc120u.dll、mfcm120.dll、mfcm120u.dll
mfc120CHS.dll(CHS、CHT、DEU、ENU、ESN、FRA、ITA、JPN、KOR、RUS)
除了少了ATLxxx.dll,其余跟VC2012差不多。
五、VC2015-2022運(yùn)行庫(包含2015、2017、2019、2022),版本號數(shù)字140,大致包含下面dll。
concrt140.dll、vcomp140.dll、vcamp140.dll、vccorlib140.dll、vcruntime140.dll、vcruntime140_1.dll
msvcp140.dll、msvcp140_1.dll、msvcp140_2.dll、msvcp140_atomic_wait.dll、msvcp140_codecvt_ids.dll
mfc140.dll、mfc140u.dll、mfcm140.dll、mfcm140u.dl
mfc140CHS.dll(CHS、CHT、DEU、ENU、ESN、FRA、ITA、JPN、KOR、RUS)
dll文件都在system32或syswow64目錄。msvcp140_1.dll、msvcp140_2.dll在VC2017后出現(xiàn);vcruntime140_1.dll、msvcp140_atomic_wait.dll(VC2019某版本后出現(xiàn))、msvcp140_codecvt_ids.dll在VC2019后出現(xiàn)。xp系統(tǒng)最高能安裝vc2015-2019。
VC2015-2022中高版本兼容低版本(即裝了vc2015-2022就無需再安裝2015、2017、2019這些)。除了極個別軟件安裝包認(rèn)死理(如Edius 9報錯0x80070666)在裝了高版本的情況下就是裝不上,除非卸載所有2015、2017、2019、2022后才能安裝。
VC2015-2022運(yùn)行庫在win7、win8等版本上安裝時,會額外安裝kb2999226補(bǔ)丁。這個補(bǔ)丁包含ucrtbase.dll、api-ms-win-xxx.dll系列dll,API?sets DLL(API集DLL)。

用dark.exe -x參數(shù),或者UniExtract2可以提取運(yùn)行庫exe里的文件。
由于xp系統(tǒng)沒有對應(yīng)的kb2999226補(bǔ)丁,所以只能安裝VC2019以下版本,這些版本的API?sets DLL包含在vcRuntimeMinimum組件的cab1.cab,不需要安裝補(bǔ)丁就會釋放api-ms-win-xxx.dll這些dll。
相關(guān)dll文件名:
ucrtbase.dll、api-ms-win-core-console-l1-1-0.dll、api-ms-win-core-datetime-l1-1-0.dll、api-ms-win-core-debug-l1-1-0.dll、api-ms-win-core-errorhandling-l1-1-0.dll、api-ms-win-core-file-l1-1-0.dll、api-ms-win-core-file-l1-2-0.dll、api-ms-win-core-file-l2-1-0.dll、api-ms-win-core-handle-l1-1-0.dll、api-ms-win-core-heap-l1-1-0.dll、api-ms-win-core-interlocked-l1-1-0.dll、api-ms-win-core-libraryloader-l1-1-0.dll、api-ms-win-core-localization-l1-2-0.dll、api-ms-win-core-memory-l1-1-0.dll、api-ms-win-core-namedpipe-l1-1-0.dll、api-ms-win-core-processenvironment-l1-1-0.dll、api-ms-win-core-processthreads-l1-1-0.dll、api-ms-win-core-processthreads-l1-1-1.dll、api-ms-win-core-profile-l1-1-0.dll、api-ms-win-core-rtlsupport-l1-1-0.dll、api-ms-win-core-string-l1-1-0.dll、api-ms-win-core-synch-l1-1-0.dll、api-ms-win-core-synch-l1-2-0.dll、api-ms-win-core-sysinfo-l1-1-0.dll、api-ms-win-core-timezone-l1-1-0.dll、api-ms-win-core-util-l1-1-0.dll、api-ms-win-crt-conio-l1-1-0.dll、api-ms-win-crt-convert-l1-1-0.dll、api-ms-win-crt-environment-l1-1-0.dll、api-ms-win-crt-filesystem-l1-1-0.dll、api-ms-win-crt-heap-l1-1-0.dll、api-ms-win-crt-locale-l1-1-0.dll、api-ms-win-crt-math-l1-1-0.dll、api-ms-win-crt-multibyte-l1-1-0.dll、api-ms-win-crt-private-l1-1-0.dll、api-ms-win-crt-process-l1-1-0.dll、api-ms-win-crt-runtime-l1-1-0.dll、api-ms-win-crt-stdio-l1-1-0.dll、api-ms-win-crt-string-l1-1-0.dll、api-ms-win-crt-time-l1-1-0.dll、api-ms-win-crt-utility-l1-1-0.dll
有些API sets DLL是系統(tǒng)自帶的,比如win7、win8、win10都自帶有。提示找不到這些DLL時(win10一般不會有這些提示),安裝VC2015-2022運(yùn)行庫可能沒有用,需要用sfc /scannow命令修復(fù)或者從win8里提取相關(guān)dll,又或者升級系統(tǒng)(比如某軟件不兼容舊版的win7時報錯,需要win8或win10里才有的API sets DLL)。
API?sets DLL不能從網(wǎng)上下載復(fù)制到system32等目錄,因為版本對不上會報錯,無法定位XXX。
個別電腦因為某些補(bǔ)丁出錯可能導(dǎo)致kb2999226補(bǔ)丁裝不上,導(dǎo)致安裝完VC2015-2022運(yùn)行庫了還是缺少API?sets DLL。分析cbs.log日志文件可能有幫助。

其余安裝VC運(yùn)行庫可能遇到:
1625錯誤(Auto Uninstaller流氓工具導(dǎo)致);

無法卸載或安裝,提示缺少msi文件安裝源。用Windows Installer Clean Up修改版清理殘留后安裝可以解決。

有時候因為誤刪或誤替換個別VC運(yùn)行庫DLL后,在安裝了對應(yīng)的VC運(yùn)行庫時還報錯找不到XXX.dll。這時候卸載對應(yīng)VC運(yùn)行庫后重新安裝,又或者控制面板里更改修復(fù)安裝可以解決。
靜默安裝參數(shù):
vc2005、vc2008:/Q
其余:/install /passive /norestart