How to detect VC++ 2008 redistributable?

前端 未结 13 1903
借酒劲吻你
借酒劲吻你 2020-12-01 02:00

Is there a Registry setting that I can look for to determine whether or not the Visual C++ redistributable is installed, whether standalone or as part of Visual Studio 2008?

相关标签:
13条回答
  • 2020-12-01 02:36

    I'd like to extend the GUID list with the following values:

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

    So please decide, whether it's a good idea to check the presence of VCredist by GUIDs.

    0 讨论(0)
  • 2020-12-01 02:37

    I don't think any of those solution can help when your using different OS ! For ex, MsiQueryProductState will always returned -1 using Vista VC8.0

    while -1 for VC8.0/8.0 SP1/9.0 with Windows 7 ! So the GUID solution that microsoft provided, doesn't work in all cases

    so i guess i'm forced to stuck with the %windir%\winsxs approach and search for

    • x86_Microsoft.VC80.CRT*
    • x86_Microsoft.VC90.CRT*

    For those who are looking for all GUIDs, Here is a list i created:

    Visual C++ 2005 runtime files

    * 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}
    

    Visual C++ 2005 SP1 runtime files

    * 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}
    

    Visual C++ 2005 SP1 ATL Security Update runtime files

    * 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}
    

    Visual C++ 2008 runtime files

    * 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} 
    

    Visual C++ 2008 SP1 runtime files

    * 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}
    

    Visual C++ 2008 SP1 ATL Security Update runtime files

    * 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}
    
    0 讨论(0)
  • 2020-12-01 02:37

    Update for anyone else hitting this problem:

    1) If you have Visual Studio installed, the required DLLs will be present, but the "redist package" is not, so the registry keys are missing. (i.e. this will give a false negative). However, installing the redist over the top in this situation is harmless.

    2) Every major release of the redist (Any combination of VS2005/VS2008, x86/x64/IA64, and service packs: SP1,ATL security update) has a different GUID. Take care if you are expecting to deploy your application on both x86 and x64 PCs.

    3) If you use LoadLibrary or a check for Dll files, make sure you target the correct version. If you look for "any" copy of msvcrt80.dll (etc) then you won't be able to tell if it is the version your program was linked to.

    0 讨论(0)
  • 2020-12-01 02:40

    I open-sourced a Visual C++ project on Github that checks for VC++ redistributable DLLs specifically and made it available under the Apache 2.0 license.

    It has three different methods for checking for the availability of VC++9 and VC++10 runtimes:

    1. Checks the MsiQueryProductState APIs;
    2. Inspect the contents of the WinSxS folder for matching product directories; and
    3. Checks the current working directory for any local versions of the VC++9 and VC++10 runtimes (and inspects their contents.)

    edit: Here's a sample of what using it actually looks like:

     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;
    

    I licensed the crt-detector project under Apache 2.0, so feel free to use it in your own applications.

    0 讨论(0)
  • 2020-12-01 02:40

    You can check for the files under the WINDOWS\WinSxS directory to see which versions you have installed. Often many versions can be installed at one time so you might need to check the specific versions you have installed.

    0 讨论(0)
  • 2020-12-01 02:41

    Check for $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_* if, for example, you're checking for the Visual Studio 2008 redistributable.

    0 讨论(0)
提交回复
热议问题