vcredist를 설치 해야하는지 여부를 감지하는 방법은 무엇입니까?
-
06-09-2019 - |
문제
나는 매우 비슷한 질문이 있습니다 이 하나 그러나 대답은 저에게 효과가 없습니다.
소프트웨어 설정을 유지 관리하는 것은 VC ++ 2008 (SP1, 정확하게)에 따라 다르므로 아직 설치되지 않은 경우 vcredist를 설치할 수있는 솔루션을 찾아야합니다. 나는 올바른 방법은 병합 모듈로 MSI를 구축하는 것이지만 내 손에 있지는 않습니다.
내가 언급하는 중복 질문의 답변 (수락 된 것)은 모든 작은 릴리스 (예 : 9.0.30729.01 vs 9.0.30729.17)가 적절한 지침을 가지고 있기 때문에 나에게 효과가 없습니다. . 또한, 이것이 Visual Studios를 감지하지 않으므로 이미 개발자 기계에있을 때 Vcredist 패키지를 불필요하게 설치할 것이라고 생각합니다. 나는 이것으로 누군가를 버그하고 싶지 않으며, 이미 Devstudio가 설치된 사람은 아닙니다.
이제 또 다른 대답 $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_
그러나 이것은 아직 SP1을 암시하는 데 도움이되지 않거나이 시점에서 내가 놓친 것이 있습니까? 내부 및 "외부"버전 번호가있는 테이블이 있으므로 특정 사소한 버전 번호를 암시 할 수 있습니까?
이 시나리오에 대해 Microsoft가 제공하는 것은 없다고 믿을 수는 없지만 이미 너무 오래간 인터 웹을 검색하면 이제 좋은 ol '로 돌아갑니다. :)
해결책
DirectX 설치를 위해 권장되는 접근 방식을 취할 수 있습니다. 항상 재분배 가능하게 실행하십시오. 필요하고 이미 배송되므로 이미 설치되어 있어도 실행하는 데 아무런 해가 없습니다.
다른 팁
Visual Studio C ++ 2010의 경우 상황이 조금 쉬워졌습니다.
Visual C ++ 2005 및 2008 재배포 가능한 패키지와 달리 Visual C ++ 2010 재배포 가능한 패키지의 존재를 감지하는 데 사용할 수있는 레지스트리 키가 있습니다.
Visual C ++ 2010 재배포 가능한 패키지 감지 레지스트리 값
Visual C ++ 2010 재배포 가능 패키지 (x86)
hkey_local_machine Software Microsoft VisualStudio 10.0 vc vcredist x86] 설치 = 1 (reg_dword)
Visual C ++ 2010 재배포 가능 패키지 (x64)
hkey_local_machine Software Microsoft VisualStudio 10.0 vc vcredist x64] 설치 = 1 (reg_dword)
Visual C ++ 2010 재분배 가능 패키지 (IA64)
hkey_local_machine Software Microsoft VisualStudio 10.0 vc vcredist ia64] 설치 = 1 (reg_dword)
메모: 64 비트 OS에서 WOW6432NODE에서 확인해야합니다. (hklm 소프트웨어 wow6432node microsoft ....)
이전 버전을 좋아한다면 여기에 Guids가 있습니다.
Visual C ++ 2010 재배포 가능한 패키지 제품 코드
- Visual C ++ 2010 재배포 가능한 패키지 (X86)-{196BB40D-1578-3D01-B289-BEFC77A11A1E}
- Visual C ++ 2010 재배포 가능한 패키지 (X64)-{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
- Visual C ++ 2010 재배포 가능한 패키지 (IA64)-{C1A35166-4301-38E9-BA67-02823AD72A1B}
Visual C ++ 2010 SP1 재배포 가능한 패키지 제품 코드
- Visual C ++ 2010 SP1 재배포 가능한 패키지 (X86)-{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
- Visual C ++ 2010 SP1 재배포 가능한 패키지 (X64)-{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
- Visual C ++ 2010 SP1 재배포 가능한 패키지 (IA64)-{88C73C1C-2DE5-3B01-AFB8-B46EF4B41CD}
거기있는 것 같습니다 또 다른 해결책 Microsoft 개발자가 제안한 사용 MsiqueryProductState API, 아아는 또한지도에 의존합니다.
업데이트: 코드는 어제 실시간으로 잘 작동하는 것 같습니다. 다음은 꿀벌이 완료되었습니다. 최신 알려진 ME Guid와 경로가 어디에서나 설치 될 예정인지 확인합니다. 두 가지 모두 실패하면 설치됩니다. 이것은 잘 작동하는 것 같습니다.
또한, "무인이지만 보이지 않는"을 의미하는 명령 줄 인수 "/QB"와 함께 설치됩니다. 보다 이 다른 블로그 게시물 그 매개 변수에 대해.
FWIW, Microsoft Visual C ++ 2008 / VC90 SP1 재분배 가능 -x86 9.0.30729 용 안내
- 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_1fc8b3b9a1e18e3b_9.0.30729*
나는 열린 소스 VC ++ 재분배 가능한 DLL을 확인하는 GitHub의 시각적 C ++ 프로젝트 구체적으로 Apache 2.0 라이센스에 따라 사용할 수있었습니다.
VC ++ 9 및 VC ++ 10 Runtimes의 가용성을 확인하는 세 가지 방법이 있습니다.
- MsiqueryProductstate API를 확인합니다.
- 제품 디렉토리와 일치하는 Winsxs 폴더의 내용을 검사하십시오. 그리고
- VC ++ 9 및 VC ++ 10 Runtimes의 로컬 버전에 대한 현재 작업 디렉토리를 확인합니다 (및 해당 내용을 검사하십시오.)
다음은 실제로 사용하는 샘플입니다.
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;
나는 라이센스를 부여했다 CRT 검출기 Apache 2.0에 따라 프로젝트를 진행하십시오. 자체 응용 프로그램에서 자유롭게 사용하십시오.