문제

이 있는 레지스트리 설정을 찾을 수 있습니지 여부를 확인하려면 Visual C++재배포 가능 패키지를 설치할지 여부를 독립형 또는 Visual Studio2008?이 있는 것을 알았을 시작할 수 있습 VC++2008redistributable 설치하고자 처리 감지만,그것은 보이는 것이기면 내가 그것을 확인할 수고 귀찮게 하지 않을 설치 프로그램을 시작하는 경우 재배포에 이미 시스템이다.

그것이 더 중요한 것이 없으면 설정을 검색으로 이것은 그냥에 대한 예비 설치 우리는 우리를 위해 새로운 버전의 소프트웨어입니다.우리는 필요하지 않습니에 대한 새로운 윈도우 설치 기반의 설치 관리자는 우리는 작업에서 교체하는 오래된 기술들과 사용하여 병합 모듈을 사용합니다.

도움이 되었습니까?

해결책

체크 레지스트리:

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

VC++2008 년(원본):\SOFTWARE\\SOFTWARE\Microsoft\Windows CurrentVersion 제거\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}

다른 팁

나는 생각하지 않는 모든 사람들의 솔루션을 도울 수 있을 때 사용하여 다른 OS!예를 들어,MsiQueryProductState 항상-1 을 반환하여 Vista VC8.0

동 -1VC8.0/8.0SP1/9.0Windows7!그래서 GUID 는 솔루션을 제공하는 microsoft,작동하지 않는 모든 경우에서

그래서 난 강제와 함께 붙어 windir%\손 접근 검색

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

을 위해 찾고있는 사람들을 위해 모든 Guid,여기에 목록을 만들었:

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}

Visual C++2005SP1runtime 파일

* 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++2005SP1ATL 보안 업데이트 런타임 파일

* 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 년 런타임 파일

* 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++2008SP1runtime 파일

* 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++2008SP1ATL 보안 업데이트 런타임 파일

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

최신을 위해 하나 VC2005:

Visual C++2005 서비스팩 1 재배포 가능 패키지 MFC 보안 업데이트

* 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

http://www.microsoft.com/downloads/details.aspx?familyid=AE2E1A40-7B45-4FE9-A20F-2ED2923ACA62

빠르고 더러운:

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

Loadlibrary 을 처리 찾는의 경로에 당신입니다.

다른 솔루션 에 의해 제안된 Microsoft-개발자 사용 MsiQueryProductState API, 슬프도에 의존하 Guid.

업데이트:코드 라이브 갔 어제와 작업하는 것처럼 보이 괜찮습니다.여기에는 무엇이며,매월 또는 매년 수행:체크에 대한 최신-알-나에게 GUID 및 path2 을 어디에서--그것은-정-to-be 설치되어 있습니다.면 모두 실패하면 그것이 설치됩니다.이것은 잘 작동합니다.

또한,설치와 명령줄 인수"/qb"의"무인지 보이지 않".보 이 블로그 게시물 그라.

FWIW,Guid Microsoft Visual C++2008/VC90SP1Redistributable-86 9.0.30729

  • 64bit30729.17:8220EEFE-38CD-377E-8595-13398D740ACE
  • 32bit30729.17:9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32bit30729.01:6AFCA4E1-9B78-3640-8F72-A7BF33448200

2 경로:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

확인 $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_* 는 경우,예를 들어,당신은 확인 Visual Studio2008redistributable.

내가 오픈 소스 Visual C++프로젝트 Github 에서 확인하는 VC++재배포 가능 Dll 특별히 만들어서 사용할 수 있는 아파치 2.0 라이센스입니다.

그것은 세 가지 다른 방법을 확인하는 가용성에 대한 VC++9VC++10 런타임:

  1. 검사 MsiQueryProductState Api;
  2. 내용을 검사하의 손상된 폴더에 일치를 위한 제품 디렉토리;고
  3. 검사는 현재 작업 디렉터리 로컬 버전의 VC++9VC++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;

I 허가 crt 검출 프로젝트에서 아파치 2.0 에는,그래서 그것을 사용하여 주시기 바랍에서 자신의 응용 프로그램.

업데이트 다른 사람들을 위해 치는 이 문제는:

가있는 경우 1)Visual Studio 에 설치되어 있는,필요한 Dll 을 존재할 것이다,그러나"재배포 패키지"지 않은,그래서 레지스트리 키가 없습니다.(i.e이렇게 부정적인 거짓).그러나,설치하는 재배포 가능 패키지 상단에 이러한 상황은 무해합니다.

2)모든 주 릴리스의 재배포(의 모든 조합 VS2005/VS2008,x86/x64/IA64 및 서비스 팩:SP1,ATL 보안 업데이트)다른입니다.돌을 기대하는 경우에는 응용 프로그램을 배포하에 x86 및 x64 개입니다.

3)사용할 경우에는 LoadLibrary 또는 체크에 대한 Dll 파일이 있는지 확인을 대상으로 올바른 버전입니다.을 보면"모든"사본 msvcrt80.dll (등)에 다음을 할 수 없는 경우 버전의 프로그램으로 연결되었습니다.

제품 코드는"Microsoft Visual C++2008Service Pack1 재배포 가능 패키지 MFC 보안 업데이트(86)는"{9BE518E6-ECC6-35A9-88E4-87755C07200F}

을 확인할 수 있는 파일에 대한 아래 WINDOWS\손 directory 버전을 확인하려면되어 있습니다.많은 종종 버전을 설치할 수 있습에서나 필요할 수 있을 확인하는 특정 버전을 설치됩니다.

고 싶 확장 GUID 목록 다음과 같은 값을 사용:

32bit30729.17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32bit30729.01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64bit30729.17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64bit30729.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}
32bit30729.4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
Visual Studio2008Professional SP1
{D7DAD1E4-45F4-3B2B-899A-EA728167EC4F}
32bit30729.01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}

그래서 결정하시기 바랍는지 여부,그것의 좋은 아이디어의 현재 상태를 확인 VCredist 여 Guid.

가장 확실한 방법은 사용 MsiQueryProductState API GUID 의 다른 vcredist 버전입니다.

그것은 작품!

니다.

견을 레지스트리에 대한 항목이 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;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top