检测VC++Redistributable运行库 vcredist_x86.exe
摘要:一般用Visual C++開發的Windows應用程序需要這個運行時庫的支持才能在沒有安裝Visual C++的計算機上正常運行,也可以在開發軟件時選擇”在靜態庫中使用 MFC“,從而將調用的庫函數的代碼嵌入應用程序,避免對運行時庫的依賴。此軟件包安裝 C Runtime(CRT)、Standard C++、ATL、MFC、OpenMP 和 MSDIA 庫的運行時組件。對于支持并行部署模式的庫(CRT、SCL、ATL、MFC 和 OpenMP),這些運行時組件安裝在支持并行程序集的 Windows 操作系統版本的本機程序集緩存中,這一緩存也稱為 WinSxS 文件夾。
形成本文前,研讀了bravo的新浪博客中《VC++Redistributable的安裝判斷 》,以及HuaHuaXia的專欄中《通過注冊表檢測是否安裝了VC++ 2008 SP1 redistributable》兩篇文章,了解到VC++Redistributable是大部分Windows平臺下開發的程序所需要依賴的庫,而vcredist_x86.exe這個6M大小的應用程序就是這個庫的安裝程序。
不同版本的VC++Redistributable具有不同的GUID(全局唯一標識),這給檢測帶來了很大困難。但是一個很明確的問題是——不管是何種版本,都會在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\路徑下生成一個注冊鍵key。
根據這個特征,這里提出一種可行方式是:根據注冊表,判斷xx鍵是否存在來判斷VC++Redistributable運行庫是否被安裝。
// RegEditDetect.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include <string> #include <Windows.h> using std::string;LPCTSTR reg[18] = { _T("{A49F249F-0C91-497F-86DF-B2585E8E76B7}"),//Microsoft Visual C++ 2005 Redistributable X86 _T("{7299052B-02A4-4627-81F2-1818DA5D550D}"),//Microsoft Visual C++ 2005 SP1 Redistributable X86 _T("{837b34e3-7c30-493c-8f6a-2b0f04e2912c}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X86 _T("{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}"),//Microsoft Visual C++ 2005 Redistributable X64 _T("{071C9B48-7C32-4621-A0AC-3F809523288F}"),//Microsoft Visual C++ 2005 SP1 Redistributable X64 _T("{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X64 _T("{03ED71EA-F531-4927-AABD-1C31BCE8E187}"),//Microsoft Visual C++ 2005 Redistributable IA64 _T("{0F8FB34E-675E-42ED-850B-29D98C2ECE08}"),//Microsoft Visual C++ 2005 SP1 Redistributable IA64 _T("{85025851-A784-46D8-950D-05CB3CA43A13}"),//Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update IA64 _T("{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}"),//Microsoft Visual C++ 2008 Redistributable X86 _T("{9A25302D-30C0-39D9-BD6F-21E6EC160475}"),//Microsoft Visual C++ 2008 SP1 Redistributable X86 _T("{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X86 _T("{350AA351-21FA-3270-8B7A-835434E766AD}"),//Microsoft Visual C++ 2008 Redistributable X64 _T("{8220EEFE-38CD-377E-8595-13398D740ACE}"),//Microsoft Visual C++ 2008 SP1 Redistributable X64 _T("{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X64 _T("{2B547B43-DB50-3139-9EBE-37D419E0F5FA}"),//Microsoft Visual C++ 2008 Redistributable IA64 _T("{5827ECE1-AEB0-328E-B813-6FC68622C1F9}"),//Microsoft Visual C++ 2008 SP1 Redistributable IA64 _T("{977AD349-C2A8-39DD-9273-285C08987C7B}"),//Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update IA64 };/* 功能:檢測lpszSubKey是否存在 */ bool detectVCppRedistributable(LPCTSTR lpszSubKey){//printf("%ls\n", lpszSubKey);HKEY hKey;int ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_READ, &hKey);RegCloseKey(hKey);return (ret == 0) ? true : false; }int _tmain(int argc, _TCHAR* argv[]){//拼接key并調用函數detectVCppRedistributable檢測注冊表for (int i = 0; i < 18; ++i){wchar_t key[100] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");wcscat_s(key, 100, reg[i]);if (detectVCppRedistributable(key)){printf("yes\n");break;}}return 0; }當然,你也可以加入更高版本的檢測,不過從2008以后,可以直接檢測.NET Framework,而不必檢測VC運行庫了
{1D8E6291-B0D5-35EC-8441-6616F567A0F7} //Microsoft Visual C++ 2010 Redistributable X64 {6a3b46d3-fbf1-4b22-8b42-48b675de6b81} //Microsoft Visual C++ 2012 Redistributable X64 {95716cce-fc71-413f-8ad5-56c2892d4b3a} //Microsoft Visual C++ 2012 Redistributable X86 {b64ca997-b626-4abb-a046-5ca2d92ed659} //Microsoft Visual C++ 2012 Redistributable X86 {050d4fc8-5d48-4b8f-8972-47c82c46020f} //Microsoft Visual C++ 2012 Redistributable X64 {7f51bdb9-ee21-49ee-94d6-90afc321780e} //Microsoft Visual C++ 2012 Redistributable X64 {f65db027-aff3-4070-886a-0d87064aabb1} //Microsoft Visual C++ 2012 Redistributable X86 {74d0e5db-b326-4dae-a6b2-445b9de1836e} //Microsoft Visual C++ 2012 Redistributable X86總結
以上是生活随笔為你收集整理的检测VC++Redistributable运行库 vcredist_x86.exe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ QT开发人机象棋(搜索算法)
- 下一篇: 12.4.1 索引顺序存取方法文件 /