Visual c++ 如何检测VC++;2008年可再发行? 是否有一个注册表设置,我可以查看它是否安装了VisualC++的可分发的,是否独立或作为VisualStudio 2008的一部分?我知道我可以启动VC++2008可再发行软件安装程序,让它处理检测,但如果我可以检查它,并且如果系统上已经有可再发行软件,就不用麻烦启动安装程序,那么它看起来会更干净

Visual c++ 如何检测VC++;2008年可再发行? 是否有一个注册表设置,我可以查看它是否安装了VisualC++的可分发的,是否独立或作为VisualStudio 2008的一部分?我知道我可以启动VC++2008可再发行软件安装程序,让它处理检测,但如果我可以检查它,并且如果系统上已经有可再发行软件,就不用麻烦启动安装程序,那么它看起来会更干净,visual-c++,redistributable,Visual C++,Redistributable,如果没有可搜索的设置,那也没什么大不了的,因为这只是针对我们新版本软件的初步安装人员。我们正在开发的新的基于Windows Installer的安装程序不需要它,这些安装程序将取代旧的技术安装程序,并将使用合并模块。您可以检查Windows\WinSxS目录下的文件,以查看已安装的版本。通常,一次可以安装多个版本,因此您可能需要检查已安装的特定版本。快速且脏: if (LoadLibrary(L"msvcrt80.dll")!=NULL) { // it is installed } Lo

如果没有可搜索的设置,那也没什么大不了的,因为这只是针对我们新版本软件的初步安装人员。我们正在开发的新的基于Windows Installer的安装程序不需要它,这些安装程序将取代旧的技术安装程序,并将使用合并模块。

您可以检查Windows\WinSxS目录下的文件,以查看已安装的版本。通常,一次可以安装多个版本,因此您可能需要检查已安装的特定版本。

快速且脏:

if (LoadLibrary(L"msvcrt80.dll")!=NULL)
{
  // it is installed
}

Loadlibrary将为您搜索路径。

检查
$WINDIR\WinSxS\x86\u Microsoft.VC90.CRT.*
例如,如果您正在检查Visual Studio 2008可再发行版本。

检查注册表:

VC++2008(sp1): HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{3C3D696B-0DB7-3C6D-A356-3DB8CE541918}

VC++2008(原件): HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}

看起来这是一个微软开发人员提出的,使用的是,唉,也依赖于guid

更新:该代码昨天上线,似乎运行良好。下面是所做的:检查最新的已知GUID和安装路径。如果两者都失败,则安装它。这似乎很有效

此外,它还安装了命令行参数“/qb”,意思是“无人参与但不可见”。看看那些女人

FWW,微软Visual C++ 2008/VC90SP1可重分配的GUID -x86

  • 64位30729.17:8220EEFE-38CD-377E-8595-13398D740ACE
  • 32位30729.17:9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32位30729.01:6AFCA4E1-9B78-3640-8F72-A7BF33448200
²路径:
$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9ae18e3b_9.0.30729*

找到了VC2008可再发行的注册表项。以下是我的解决方案:

BOOL IsVC2008RedistInstalled(LPCTSTR pLogFile)
{
    TCHAR szLogEntry[256];
    memset(szLogEntry, '0', sizeof(szLogEntry));
    HKEY hKey;
    LONG lErr;

    TCHAR csid[256];
    _stprintf( csid, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{9A25302D-30C0-39D9-BD6F-21E6EC160475}"));
    lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, csid, 0, KEY_QUERY_VALUE, &hKey);
    if (lErr == ERROR_SUCCESS)
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was installed before.\n"));
    toFile(pLogFile, szLogEntry);
    return TRUE;
    }
    else
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was not installed before. %ld\n"), lErr);
    toFile(pLogFile, szLogEntry);
    return FALSE;
    }
}

更新对于遇到此问题的任何其他人:

1) 如果已安装Visual Studio,则会显示所需的DLL,但“redist包”不存在,因此缺少注册表项。(即,这将给出假阴性)。但是,在这种情况下,在顶部安装redist是无害的

2) redist的每个主要版本(VS2005/VS2008、x86/x64/IA64和service Pack:SP1、ATL安全更新的任意组合)都有不同的GUID。如果希望在x86和x64 PC上部署应用程序,请小心


3) 如果使用LoadLibrary或检查Dll文件,请确保目标版本正确。如果您查找msvcrt80.dll(etc)的“任意”副本,则无法判断它是否是您的程序链接到的版本。

我想用以下值扩展GUID列表:

32位30729.17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32位30729.01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64位30729.17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64位30729.01
{0DF3AE91-E533-3960-8516-B23737F8B7A2}
VC++2008(sp1)
{3C3D696B-0DB7-3C6D-A356-3DB8CE541918}
VC++2008(原件)
{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
IA64 30729.01
{22E23C71-C27A-3F30-8849-BB6129E50679}
32位30729.4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
Visual Studio 2008专业版SP1
{D7DAD1E4-45F4-3B2B-899A-EA728167EC4F}
32位30729.01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}


因此,请决定,通过guid检查vcredit的存在是否是一个好主意。

我认为这些解决方案在您使用不同的操作系统时都没有帮助!对于ex,使用Vista VC8.0,MsiQueryProductState将始终返回-1

而-1适用于VC8.0/8.0 SP1/9.0和Windows 7!因此,microsoft提供的GUID解决方案并非在所有情况下都有效

所以我想我不得不坚持使用%windir%\winsxs方法并搜索

  • x86_Microsoft.VC80.CRT*
  • x86_Microsoft.VC90.CRT*
对于那些寻找所有GUI的人,下面是我创建的列表:

Visual C++ 2005运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

Visual C++ 2005 SP1运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

VisualC++ 2005 SP1 ATL安全更新运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

Visual C++ 2008运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

Visual C++ 2008 SP1运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

VisualC++ 2008 SP1 ATL安全更新运行时文件

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}
* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}
* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 
* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

最可靠的方法是使用带有不同vcredist版本GUID的MsiQueryProductStateAPI

它起作用了

尊敬。

VC2005的最新版本:

Visual C++ 2005 Service PACK 1可重分发包MFC安全更新< /P>

* VC 8.0 SP1 MFCLOC Patch (x86) - {710F4C1C-CC18-4C49-8CBF-51240C89A1A2}
* VC 8.0 SP1 MFCLOC Patch (x64) - {AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}
* VC 8.0 SP1 MFCLOC Patch (ia64) - {C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}
8.0.50727.6195

<微软> Visual C++ 2008 Service PACK 1可再分发包MFC安全更新(x86)的产品代码是{9BE518E6ECC635A98E4-875 5C07200 F}} /P>< P>我专门开放源码,并在Apache 2许可下使用。 它有三种不同的方法来检查VC++9和VC++10运行时的可用性:

  • 检查MsiQueryProductState API
  • 检查WinSxS文件夹的内容是否与产品目录匹配;及
  • 检查当前工作目录中VC++9和VC++10运行时的任何本地版本(并检查其内容)
  • 编辑:下面是一个使用它的示例:

     wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
     wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
     wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
     wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
     wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
     wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;
    

    wcout这种方法的一个问题是,您必须为您创建的每个DLL执行此操作