Visual Studio 2012 용 Visual C ++ 재배포 가능 패키지가 설치되어 있는지 감지


109

Visual Studio 2012 용 Visual C ++ 재배포 가능 패키지가 설치되어 있는지 확인하는 방법은 무엇입니까?

Google을 사용해 보았지만 아무도이 질문을하지 않았습니다. 놀랍습니다!


1
C ++> 코드 생성의 런타임 라이브러리를 다중 스레드 [디버그] dll 대신 다중 스레드 [디버그]로 설정하여 종속성을 제거하지 않는 이유는 무엇입니까? 종속성을 제거하여 런타임 재배포 설치 문제를 해결했습니다.
Cem Kalyoncu 2015

시행 착오로 패키지를 감지하는 방법을 찾았습니다. 마법의 총알이 있었으면 좋겠지 만 만약 있다면 아직 찾지 못했다. 현재 대부분 을 돕기 위해 100 % 작동하는 것처럼 보이는 특정 redist에 대한 답변이 아래 에 있습니다.
kayleeFrye_onDeck

3
kayleeFrye_onDeck에 의해 허용되는 답변을 변경하는 것을 고려하십시오. 나는 신뢰할 수있는 방법을 찾고 연령을 보낸이는 나는 그것이 올바른 정보를 찾기 위해 많은 사람들이 도움이 될 것입니다 다른 신뢰할 수없는 답변 모두와 함께 생각 한 것 같다
musefan

Visual Studio 2017 런타임에 대한 업데이트 인 14.10.V25017이있는 것 같습니다. 링크 : go.microsoft.com/fwlink/?LinkId=746572 레지스트리 값을 업데이트 할 수 있습니까?
karel vergauwe

답변:


172

사용중인 버전에 따라 다릅니다. 이 두 개의 2012 키는 업데이트 4 용으로 다운로드 할 해당 버전과 함께 저에게 잘 작동했습니다. 이러한 등록 위치 중 일부는 OS에 따라 다를 수 있습니다. 이 정보는 Windows 10 x64 상자 에서 수집했습니다 . 계속해서 이러한 모든 redist 버전과 설치를 감지하기 위해 검색하는 reg 키를 덤프하겠습니다. :


Visual C ++ 2005

Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180

직접 다운로드 URL : https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE

Microsoft Visual C++ 2005 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a 
Configuration: x86
Version: 6.0.2900.2180

직접 다운로드 URL : https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE


Visual C ++ 2008

Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D 
Configuration: x64
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

직접 다운로드 URL : https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe

Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0
Configuration: x86
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

직접 다운로드 URL : https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe


Visual C ++ 2010

Microsoft Visual C++ 2010 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F 
Configuration: x64
Version: 10.0.40219.325

직접 다운로드 URL : https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe

Microsoft Visual C++ 2010 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A 
Configuration: x86
Version: 10.0.40219.325

직접 다운로드 URL : https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe


Visual C ++ 2012

Microsoft Visual C++ 2012 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6} 
Configuration: x64
Version: 11.0.61030.0

직접 다운로드 URL : https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe

Microsoft Visual C++ 2012 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f} 
Configuration: x86
Version: 11.0.61030.0

직접 다운로드 URL : https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe

버전 경고 : 사용자 별 Wai Ha Lee 의 결과, "... VC ++ 2012 업데이트 4 ( 11.0.61030.0) 와 함께 제공되는 바이너리 11.0.60610.1에는 ATL 및 MFC 바이너리 용 버전 이 있으며, 11.0.51106.1그 밖의 모든 항목 (예 : msvcp110.dll 및 msvcr110.dll)에 대한 버전이 있습니다. .. "


Visual C ++ 2013

Microsoft Visual C++ 2013 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f} 
Configuration: x64
Version: 12.0.30501.0

직접 다운로드 URL : https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

Microsoft Visual C++ 2013 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} 
Configuration: x86
Version: 12.0.30501.0

직접 다운로드 URL : https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe


Visual C ++ 2015

대안으로 2015-2019 번들 사용 고려

Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{d992c12e-cab2-426f-bde3-fb8c53950b0d}
Configuration: x64
Version: 14.0.24215.1

직접 다운로드 URL : https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe

Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{e2803110-78b3-4664-a479-3611a381656a}
Configuration: x86
Version: 14.0.24215.1

직접 다운로드 URL : https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe


Visual C ++ 2017

대안으로 2015-2019 번들 사용 고려

주의 사항 : 새로운 2017 레지스트리 규칙이 사용 중이거나 아직 확정되지 않았습니다. 내가 추측하고있는 것처럼 : [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle] 그리고 [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

변경 될 수 있거나 적어도 중첩 된 GUID가 다른 경우 GUID로 끝나는 키 목록을 사용하겠습니다.

Microsoft Visual C++ 2017 Redistributable (x64) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle\Dependents\{427ada59-85e7-4bc8-b8d5-ebf59db60423}]
Configuration: x64
Version: 14.16.27012.6

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe

Microsoft Visual C++ 2017 Redistributable (x86) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle\Dependents\{67f67547-9693-4937-aa13-56e296bd40f6}]
Configuration: x86
Version: 14.16.27012.6

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe


Visual C ++ 2019 ( 2015-2019 번들 )

주의 사항 : Visual C ++ 2019에 사용되는 또 다른 새로운 레지스트리 규칙이 있습니다. 또한 Visual C ++ 2019 용 독립 실행 형 설치 프로그램이없는 것으로 보이며 Visual C ++ 2015 ~ 2019 인이 번들 설치 프로그램 만 있습니다.

14.21.27702

Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.21,bundle\Dependents\{f4220b74-9edd-4ded-bc8b-0342c1e164d8}]
Configuration: x64
Version: 14.21.27702  

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.21,bundle\Dependents\{49697869-be8e-427d-81a0-c334d1d14950}]
Configuration: x86
Version: 14.21.27702

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe

14.22.27821

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.22,bundle\Dependents\{5bfc1380-fd35-4b85-9715-7351535d077e}]
Configuration: x86
Version: 14.22.27821

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.22,bundle\Dependents\{6361b579-2795-4886-b2a8-53d5239b6452}]
Configuration: x64
Version: 14.22.27821

직접 다운로드 URL : https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe


변경 내역 :
2019 년 8 월 19 일-2015-2019 번들 버전의 새 버전
추가 2019 년 6 월 13 일-2015-2019 번들 버전에 대한 새 섹션 추가14.21.27702 추가 하고 사용 고려에 대한 2015 및 2017 섹션에 작은 참고 사항 을 추가했습니다. 대안으로 새 번들.
2018 년 12 월 14 일 9.0.30729.6161-Jim Wolff의 결과에 따라 서비스 팩 1의 MSVC2008 업데이트
2018 년 11 월 27 일-MSVC2017에 대한 정보 업데이트 v.14.16
2018 년 9 월 12 일 Ha Lee의 조사 결과에 따라 2012 업데이트 4에 대한 버전 경고가
8 월 24 일에 추가되었습니다. 2018-14.15.26706에 대한 2017 버전 업데이트, VS 2017 15.8.1과 함께 패키징 된 업데이트 된 Visual C ++ 종속성
2018 년 5 월 16 일-새로운 C ++ 2017 항목
으로 14.14.26405.0에 대한 2017 버전 업데이트 2017 년 9 월 8 일-새로운 Visual C ++ 2017 항목으로 14.11.25325.0에 대한 2017 버전 업데이트 2017 년
4 월 7 일 -2017 년 버전 14.10 업데이트 새로운 Visual C ++ 2017 항목 인 .25008.0
2016 년 10 월 24 일-14.0.24215.1에 대한
2015 버전 정보 업데이트 2016 년 8 월 18 일 -14.0.24212에 대한 2015 버전 정보
업데이트 2016 년 5 월 27 일-MSVC2015 업데이트 2에 대한 업데이트 정보

구식이 된 경우 여기에서 저에게 연락하십시오.


4
이것은 완벽 해요. 이것은 Visual Studio가 설치되거나 런타임이 제거 될 때 오 탐지를 제공하지 않는 유일한 것입니다.
AN

2
VS2015 Pre Update 1의 GUID는 {74d0e5db-b326-4dae-a6b2-445b9de1836e}이므로이 메커니즘을 사용하여 피클에 들어갈 수 있습니다. 향후 업데이트 될 때마다! 업데이트 1이 설치된 사전 업데이트 1 VCRedist를 실행하면 오류가 발생했습니다. 따라서 VC 설치 프로그램 등록 키를 사용하겠습니다. VCRedist를 사용하면 괜찮을 것 같습니다.
GilesDMiddleton

4
불행하게도이 VCREDIST 14.0 업데이트 2가 포함되어 있지 않습니다 - 우리는 앞으로 호환성 (새로운 탐지 같은 런타임 버전 성공) 처리 어떻게
숀 윌슨

2
@ManjunathBabu, Visual C ++ 재배포 가능 설치 관리자의 레지스트리 규칙에 관한 외부 문서가 없다고 생각합니다. 나는 그들이 의미있는 부모 키 이름없이 어딘가에 다른 GUID를 던지는 대신 실제로 2017 년쯤에 계획과 비슷한 것을 따르는 것처럼 보였습니다. 지금까지, 그들은 2017에 대한 모든 발표 설치에 대한 이러한 위치를 사용했다 : [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
kayleeFrye_onDeck

2
Visual C ++ 2017의 새 패키지는 레지스트리 경로를 변경합니다 (버전 14.16.27012.6)[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
live2

31

시험

HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0

출발점으로. 나는 이것을 VC ++ 11 (VS 2012) 런타임 설치를위한 검사로 사용할 것입니다.


7
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Install은 1로 설정되어야합니다
Alex Spence

3
32 비트 (일명 x86)의 경우 키는 다음 위치에 있습니다.HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
CodeFox 2007

@kayleeFrye_onDeck이 작업을 수행하는 방법을 찾았습니까? 나도 여전히 신뢰할 수있는 방법을 찾고 있지만이 페이지의 답변 중 어느 것도 저에게 도움이되지 않았습니다
AN

그것은 가능성이 마이크로 소프트가 제공하는 모든 패치 변화, 패키지 UUID에 의존하지 않는 한 허용보다 더 나은 해답
jpo38

25

64 비트 시스템 에서이 레지스트리 위치 에있는 Installed값을 확인할 수 있습니다 . 레지스트리 키에 액세스하는 코드에서 . 이 없습니다 .1HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86Wow6432Node

32 비트 시스템에서 레지스트리는 다음없이 동일합니다 Wow6432Node.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86


2012 VC ++ 런타임이 설치된 32 비트 Win7 컴퓨터가 있는데이 reg 키가 없습니다.
BryanJ 2013 년

`HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC`가 없으십니까? 당신은 무엇을 가지고 있습니까?
Mike de Klerk 2013 년

2
가지고 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC있지만 Runtimes열쇠 가 없습니다 . 나는 Dave의 대답에 열쇠가 있습니다 HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0.
BryanJ 2013 년

@BryanJ 홀수 각 시스템은 매우 다를 수 있다는 것을 ...이 유용한 정보를 추가 주셔서 감사합니다
마이크 드 클레르 크를

3
재미있는 이야기와 MS의 실제 정보가 없습니다. 지금까지 발견 한 가장 좋은 답을 가지고 계신 것 같습니다. 상대적으로 새로운 VM에 vcredist를 설치하기 위해 테스트되었으며 나중에 찾은 유일한 키입니다. 그러니 내 옆에서 위로 엄지 ...
anhoppe 2014-04-16

12

Visual C ++와 함께 제공되는 부트 스트 래퍼 패키지 매니페스트에는 installcheck 요소가 없습니다. 필수 구성 요소로 설정하면 Microsoft가 항상 설치하기를 원합니다.

물론 MsiQueryProductState를 호출하여 MSI를 통해 VC redist 패키지가 설치되었는지 확인할 수 있습니다. 패키지 코드는 다음을 실행하여 찾을 수 있습니다.

wmic product get

명령 줄에서 또는 이미 wmic : root \ cli에있는 경우 다음을 실행합니다.

product where "Caption like '%C++ 2012%'"

10

이 간단한 질문에 대한 답은 안타깝게도 간단한 질문이 아니라 모든 시스템에서 100 % 작동하며 수많은 .net 프레임 워크로 확장 할 수도 있습니다.

복잡성은 VC 런타임 수정이 많았 기 때문에 VC10 런타임이 설치되었지만 빌드 번호가 충분히 최신이 아니 어서 EXE를 설치하지 않으면 EXE가 시작되지 않을 수 있습니다. 필요한 정확한 런타임 또는 동일한 주 버전에 대해이 버전과 이전 버전을 함께 실행할 수있는 최신 런타임 중 하나 (나란히있는 지옥). 또한 64 비트 EXE가있는 경우 32 비트 및 64 비트 런타임을 모두 확인해야합니다.

즉, EXE의 런타임이 설치되었는지 여부를 확인하는 유일한 방법 은 EXE 실행을 시도하는 것입니다. 또는 주 EXE와 동일한 설정으로 빌드되고 유일한 목적이 아무것도하지 않는 다른 EXE를 실행하는 것입니다. 실행 (런타임이 설치되었음을 의미)하거나 실행에 실패 (설치되지 않은 경우)하십시오.

VC10 32 비트 및 64 비트 런타임을 설치해야하는 설치 프로그램에 대해 다음을 수행했습니다. 설치 프로그램은 모든 더미 EXE를 시작하려고 시도하고 성공하면 해당 런타임이 설치된 것으로 간주됩니다. 이것은 또한 32/64 비트 시나리오를 해결합니다.

그런데 이것은 다운로드 가능한 내장 .net 3.5 지원이 .net 버전 3.0 및 2.0도 지원하므로 Windows 8 및 10에서 매우 까다로운 적절한 .net 프레임 워크가 설치되어 있는지 확인하는데도 사용됩니다. 이들에 대한 레지스트리 항목이 없습니다. (그리고 더 나쁜, 당신도 여기에 표준 프레임 워크 설치 프로그램을 사용할 수 없습니다, 당신은 해야합니다 지원 내장 및 Windows를 통해 다운로드, 또는 .net 4와 응용 프로그램을 다시,하지만 그건 또 다른 이야기의 사용)를.

C ++ 더미 EXE는 다음 코드 (필요한 경우 64 비트 구성의 다른 코드)가있는 프로젝트를 사용하여 빌드 할 수 있습니다.

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

프로젝트의 속성을 설정해야합니다. MFC사용하여 공유 DLL에서 MFC사용합니다. . 실행 파일의 크기는 약 4KB입니다. 확실한 결과를 얻기 위해 지불해야하는 적은 비용입니다.

사용자에게 멋진 설치 환경을 제공하기 위해 다음을 수행 할 수 있습니다 (샘플 코드는 NSIS 용입니다 ).

Function TryLaunchApplication
  Pop $1 ; pathname
  nsExec::Exec $1
  Pop $0

  ${If} $0 == "error"
  ${OrIf} $0 != 0
    Push 0
  ${Else}
    Push 1
  ${EndIf}
FunctionEnd

함수에서 호출합니다 (예 : CheckRuntimes).

Function CheckRuntimes
  ; Try to execute VC++ 10 application (32 bit)
  Push "Vc10RuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $Vc10RuntimesFound

  ; Add 64 bit check if required.
  ; Remember to try running the 64 bit EXE only on a 64 bit OS,
  ; which requires further checks.

  ; Try to execute .net application
  Push "DotNetRuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $DotNetFrameworkFound
FunctionEnd

그런 다음 떠날 때 런타임 체크 등을 실행 환영 당신이하지 않아도, 그 결과를 페이지를 캐시 때마다 다시 확인 "뒤로"및 "다음"버튼을 사용자가 클릭.

다음으로 설치 트리에서 읽기 전용 섹션을 만들고 구성 요소 페이지가 표시 되기 전에 실행되는 기능에서 미리 선택하거나 선택 취소합니다 .

이렇게하면 누락 된 각 런타임 구성 요소의 설치가 필수이며 이미있는 경우 건너 뜁니다.


유용한 팁에 감사드립니다. 어떤 유형의 프로젝트를 만들어야하는지 기억하십니까? VS에는 선택할 수있는 과다한 것들이 있습니다 :-).
greenoldman

9

Visual Studio 2010 이상에서는 WinSxS 사용이 중지되었으므로 % windir % \ system32 \ msvcr110.dll 만 확인하는 것으로 충분할 수 있습니다. 충분한 새 버전이 있는지 확인하려면 파일 버전이 11.0.50727.1 (VS2012 RTM)인지 11.0.51106.1 (VS2012 업데이트 1)인지 확인할 수 있습니다.


+1 이것은 더 간단하고 완벽합니다. 레지스트리 키는 모두 괜찮지 만 사용자가 시스템을 엉망으로 만들고 msvcr110.dll을 삭제하면 레지스트리 검사는 쓸모가 없습니다. 필요한 모든 구성 요소 (msvcr110.dll, msvcp110.dll, mfc, ...)를 확인하는 것이 가장 좋습니다. 업데이트 3의 경우 버전은 11.0.60610.1입니다.
stijn 2013-07-21

마지막 비트 무시 : 설치 프로그램 만 11.0.60610.1이고 crt dll의 버전은 여전히 ​​11.0.51106.1
stijn

ya vs2012 sp4가 설치되어 있어도 .dll은 11.0.51106.1입니다
Blub

작동하지 않습니다. 2005-2015를 제거했지만 여전히 60, 100, 110, 120 및 140에 대한 msvc 파일이 있습니다.
kayleeFrye_onDeck

VC ++ 2012 업데이트 4 ( 11.0.61030.0) 와 함께 제공되는 바이너리 11.0.60610.1에는 ATL 및 MFC 바이너리와 11.0.51106.1그 밖의 모든 버전 ( 예 : msvcp110.dll 및 msvcr110.dll)이 있습니다. 이유가 확실하지 않습니다. 당신은로 이동하여 (I가 그것을 테스트 한 윈도우 10 시스템에서)이를 확인할 수 있습니다 C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86다음 .CAB 파일에있는 파일을 검사.
Wai Ha Lee

5

WiX에서 만든 MSI 설치 프로그램의 일부로 Visual C ++ 재배포 가능 여부를 확인하는 맥락에서이 질문에 답을 찾았습니다.

버전 및 운영 체제에 따라 GUID가 변경되는 방식이 마음에 들지 않아 Visual C ++ 재배포 가능 패키지를 확인하기 위해 C #으로 작성된 사용자 지정 작업을 만들었습니다.

아래의 모든 내용은 특히 Visual C ++ 2015 재배포 가능 패키지 (x64) 용이지만 모든 버전에 대해 쉽게 수정할 수 있습니다.

using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;

namespace CustomActions
{
    public class DependencyChecks
    {
        [CustomAction]
        public static ActionResult IsVC2015RedistInstalled(Session session)
        {
            session.Log("Begin Visual C++ 2015 Redistributable installation check.");

            var dependenciesKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Installer\\Dependencies");

            foreach(var subKey in dependenciesKey.GetSubKeyNames())
            {
                var dependency = dependenciesKey.OpenSubKey(subKey);
                var displayName = (string)dependency.GetValue("DisplayName");
                if(displayName != null)
                {
                    if (displayName.Contains("Microsoft Visual C++ 2015 Redistributable (x64)"))
                    {
                        session.Log("Visual C++ 2015 Redistributable is installed.");
                        return ActionResult.Success;
                    }
                }
            }

            session.Log("Visual C++ 2015 Redistributable is not installed.");
            session.Message(InstallMessage.Error, new Record(1, "This application requires Visual C++ 2015 Redistributable. Please install, then run this installer again. https://www.microsoft.com/en-us/download/details.aspx?id=53587"));
            return ActionResult.Failure;
        }
    }
}

그런 다음 wxs 파일에서

<Binary Id='VC2015RedistCheck' SourceFile='!(wix.ResourcesDir=resources)\CustomActions.CA.dll'/>
    <CustomAction
      Id='VC2015RedistCheckAction'
      Execute='immediate'
      BinaryKey='VC2015RedistCheck'
      DllEntry="IsVC2015RedistInstalled"
      Return='check'/>

<InstallExecuteSequence>
  <Custom Action='VC2015RedistCheckAction' After='InstallInitialize'/>
</InstallExecuteSequence>

편집 사용자 지정 작업 만들기 및 사용에 대한 몇 가지 기본 정보로이 답변을 업데이트하고 있습니다.

WiX Toolset Visual Studio 2017 확장이 설치된 Visual Studio 2017에서 사용자 지정 작업을 생성하기 위해 프로젝트 템플릿을 사용하여 사용자 지정 작업 (Wix v3 용 C # 사용자 지정 작업 프로젝트)을 생성했습니다.

생성 된 프로젝트를 확인한 결과 이미이 기사의 시작 부분에 나열된 변경 사항이있는 것 같습니다. https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed 그래서 섹션에서 그 기사를 선택했습니다.Adding Custom Action to the Installer 약간의 수정을가했습니다.

내가 한 다른 한 가지는 프로젝트가 빌드 된 .NET 프레임 워크의 버전을 3.5로 변경 한 것입니다.

정말 유용하다고 생각하지 않았지만 http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html 을 볼 수도 있습니다 .


4

나를 위해이 위치는 작동했습니다 : HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version

패키지를 설치 한 후 가지고있는 버전을 확인하고 설치 프로그램의 조건으로 사용하십시오. (VCred 설치 후 광산은 11.0.50727로 설정 됨).


이 답변은 정확히 우리가 찾고 있던 것입니다 (여기에서 다른 답변과 달리 런타임에 대한 답변이 아니라 Visual Studio에 대한 답변입니다.)
Shaun Wilson

redist를 제거한 후에이 키가 존재하므로이 대답은 작동하지 않습니다.
kayleeFrye_onDeck

4

제어판> 프로그램 및 기능으로 이동하면 모두 목록에 표시됩니다.

나는 전문가가 아니며 사람들이 대답하는 것 (레지스트리 확인)에 비해이 대답은 매우 간단하므로 정답인지 확실하지 않지만 트릭을 수행했습니다.

프로그램 및 기능


3
if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86","Installed") = 0 Then
  if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86","Installed") = 0 Then

3

InnoSetup으로 성공했습니다.

레지스트리 키가 있는지 확인했습니다.

HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes

제거하면 존재하지 않습니다. 설치된 경우 존재합니다.

그건 그렇고, Wow6432Node에있을 수도 있습니다.

HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes


이것은 사실이 아닙니다. 키는 제거되었을 때 두 위치에 모두 존재합니다.
kayleeFrye_onDeck

1
@kayleeFrye_onDeck 네 ... 동의합니다. 하지만 사실 처음 시도했을 때 성공했습니다. 하지만 최근에 말씀하신 것과 같습니다. 왜 그런지 모르겠습니다.
Fandi Susanto 2015

3

MsiQueryProductState 를 통해 제품의 설치 상태 를 확인하는 것은 레지스트리를 직접 확인하는 것과 거의 동일하지만 여전히 ProductCode에 대한 GUID가 필요합니다 .

다른 곳에서 언급했듯이 이러한 접근 방식의 한 가지 단점은 각 업데이트에 고유 한 ProductCode가 있다는 것입니다!

고맙게도 MSI는 '패밀리'제품을 식별 하는 UpgradeCode 를 제공합니다 . orca를 사용하여 MSI 중 하나를 열어이 정보를 추출 할 수 있습니다. 예를 들어 VS2015 재배포 가능 파일의 UpgradeCode는 다음과 같습니다.{65E5BD06-6392-3027-8C26-853107D3CF1A}

MsiEnumRelatedProducts 를 사용 하여 해당 UpgradeCode에 대한 모든 제품 ID를 가져올 수 있습니다 . 실제로 각 redist 업데이트가 이전 업데이트를 대체하므로 {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}VS2015 업데이트 2 x86 과 같이 하나의 ProductCode 만 생성됩니다 .

관계없이 MsiGetProductInfo 를 통해 버전을 확인할 수 있습니다. (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) 또는 유사한 기능을 통해 버전을 확인하여 원하는 버전과 비교할 수 있습니다 (예 : 동등한 버전 또는 이후 버전 확인).

참고는 C ++ 응용 프로그램 내에서, 당신은 또한 사용할 수있는 _VC_CRT_MAJOR_VERSION, _VC_CRT_MINOR_VERSION, _VC_CRT_BUILD_VERSION만약 당신이 #include <crtversion.h>- 당신이 당신의 바이너리로 지어진 것을 계산 브라운관의 버전을 확인할 수 있습니다 이런 식으로.


이 정보를 어떻게 얻었습니까? 그리고 그것은 x86 버전 또는 x64 버전의 UpgradeCode입니까?
Ben Key

Orca를 사용하여 msi를 열고 UpgradeCode를 추출 할 수 있습니다. 여기에 주어진 것은 적어도 x86 용입니다. 나머지 정보를 어디서 얻었는지에 관해서는 이것이 거의 주요 소스입니다. 특별히 redist와 관련하여이 접근 방식에 대한 다른 참조를 온라인에서 찾을 수는 없지만 UpgradeCode / family 패턴은 MSI 설치 프로그램에서 일반적입니다.
adzm

나는 Orca를 알고 있습니다. 문제는 해당 MSI에 도달하는 것과 관련이 있습니다. 직접 액세스하는 방법을 모르겠습니다. 내가 아는 유일한 방법은 어떻게 든 c : \ Windows \ Installer 디렉토리에서 찾는 것입니다. 그 디렉토리에 1,000 개가 넘는 파일이 있습니다. 파일 이름은 무작위로 지정됩니다. 어떤 MSI가 올바른지 확인하는 유일한 방법은 설명을 보는 것입니다. 여기에는 탐색기에서 1,000 개의 파일에서 Alt + Enter를 누르거나 도구를 사용하여 1,000 개의 파일에 대한 설명을 덤프하는 것이 포함됩니다.
Ben Key

아 알 겠어. 레지스트리를 검색하여 HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes 내에서 제품 코드를 알고있는 경우 경로 또는 업그레이드 코드를 찾을 수도 있습니다. 그러나 나머지를 알아 내기 위해 WMIC (또는 msi db에 대한 다른 프로그래밍 방식 액세스)를 사용해야 할 수도 있습니다. wmic product get / format : csv는 검색 할 수있는 csv를 덤프합니다. 반환 된 값에 msi 경로가 있습니다. 더 나은 스크립트를 작성할 수는 있지만이 정도면 충분합니다.
adzm

3

이 PowerShell 코드는 트릭을 수행해야합니다.

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table AutoSize

많은 제품 코드를 하드 코딩하는 것이 실행되지 않을 것이기 때문에, 정규식으로 각 항목의 "제품 이름"을 확인하는 레지스트리도 열거 한 다음 VersionMajor / VersionMinor (우리가 정말로 신경 쓰는 전부)를 확인합니다. 우리가 단일 빌드를 생성하고 주어진 vcredist 버전의 서비스 수명 동안 계속 작동 할 것임을 알 수 있도록합니다. 여기에서 의도 한 바는 정확하지만 NSIS 또는 WinAPI 기반 설치 프로그램과 같은 도구 세트에 대한 음역이 필요할 수 있습니다.
숀 윌슨

2

나는 똑같은 것이 필요했고 AFAIK는 프로그래밍 방식으로 수행 할 수 없지만 나를 위해 일했습니다.

방금 시작-> 프로그램 제거로 이동하여 버전 번호가 포함 된 VC ++ 재배포 가능 패키지를 찾을 때까지 아래로 스크롤했습니다. 버전 번호를 검색하여 VS2012 SP1에 속한다고 말했습니다.


2

오래된 질문이지만 여기에 Visual Studio 2005 이후로 성공한 접근 방식이 있습니다. 방금 Visual Studio 2012 업데이트 4를 사용하여 테스트했습니다 (마지막으로 2010 년부터 2012 년까지 소프트웨어를 업데이트하고 있기 때문에).

Visual C ++ 재배포 가능 패키지는 제거 프로그램을 Windows에 등록하므로 (제어판 "프로그램 및 기능"목록에 표시됨) 레지스트리에서 제거 프로그램 키의 표시 이름 만 확인합니다.

다음은 관련 NSIS 코드입니다.

ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}\" "DisplayName"
StrCmp $0 "Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.61030" vs2012redistInstalled
DetailPrint "Microsoft Visual C++ 2012 Update 4 Redistributable not found!"
DetailPrint "Downloading from www.mywebsite.com"
; insert applicable download code here
ExecWait '"<downloaded redist exe>" /promptrestart /passive'
vs2012redistInstalled:

설치 프로그램이 32 비트 exe이기 때문에 Windows는 레지스트리 키가 실제로 위의 위치 대신 가상화 된 Wow6432Node에 있는지 확인하므로 위 코드는 두 키를 모두 명시 적으로 확인하지 않고도 64 비트 및 32 비트 Windows 설치 모두에서 작동합니다.

또한 위 코드를 다른 버전의 VC ++ Redist로 업데이트하려면 레지스트리 키 경로의 GUID와 표시 이름을 필요한대로 변경하면됩니다.

권장되는 방법은 아니지만 2005, 2010, 2010sp1 및 현재 2012u4 용 redist를 사용하여 XP / XP64에서 Windows 10까지 모든 종류의 Windows를 실행하는 지난 10 년 동안 10,000 개 이상의 컴퓨터에서 작업했습니다.


1

나는 Installed가치를 확인할 것이다

HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}

  • GUID VC++ 2012 (x86){33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Node 존재 여부에 따라 VC++ redist제품에

0

대부분의 사람들이 놓치는 것은 필수입니다. /reg:32 Windows x64에서 키를 확인 한다는 것입니다.

참조 마이크로 소프트 도움말 문서를이 주제에 대한 를 .

다음은 Visual Studio 2012 업데이트 4 용 Visual C ++ 재배포 가능 패키지를 올바르게 확인하는 방법을 보여주는 스크립트입니다.

@ECHO OFF

:Author
REM "CREATED BY WAR59312"
REM "FEB 7th 2017"

REM Clear Screen
CLS

TITLE Detect Visual C++ 2012 Redistributables

REM This Batch Script Detects If Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed

:DetectWindowsOS
REM Are We Running On x86 Or x64
IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
IF %PROCESSOR_ARCHITECTURE% EQU x86 (
REM Windows Is x86
GoTo Check32Bit
) ELSE (
REM Windows Is x64
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)) ELSE (
REM Windows Is Unknown But Assume x64 To Be Safe
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)

:Check64Bit
REM Checks If Visual C++ 64Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x64" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
  ECHO.
  ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
  ECHO.
  GoTo Check32Bit
) || (
   ECHO.
   ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
   ECHO.
   GoTo Check32Bit
)

:Check32Bit
REM Checks If Visual C++ 32Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
) || (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
)

:END
ECHO.
PAUSE

EXIT

0

powershell 스크립트 솔루션 :

@kayleeFrye_onDeck의 답변 정보를 기반으로

사용자가 지정한 버전을 확인하고 설치하는 powershell 스크립트를 만들었지 만 광범위한 테스트를 수행하지는 않았지만 내 자체 CI (연속 통합) 시나리오에서는 완벽하게 작동합니다.

github 에 대한 전체 스크립트 및 정보

내가 사용한 접근 방식은 여기에 제공된 정보를 기반으로 regkeys를 확인하는 것입니다. 다음은 스크립트가 수행하는 작업의 요점입니다.

function Test-RegistryValue {
param (
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Path,
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Value
)
    try {
    Get-ItemProperty -Path "$($Path+$Value)" -ErrorAction Stop | Out-Null
        return $true
    }
    catch {
        return $false
    }
}

$redistInfokayleeFrye_onDeck의 컴파일 된 정보를 포함하는 확인 / 다운로드 / 자동 설치 .

$redistInstalled = Test-RegistryValue -Path $redistInfo.RegPath -Value $redistInfo.RegValue
if($redistInstalled -eq $False) {
    Invoke-WebRequest -Uri $redistInfo.DownloadUrl -OutFile $downloadTargetPath
    Start-Process -FilePath $downloadTargetPath -ArgumentList "$($redistInfo.SilentInstallArgs)" -Wait -NoNewWindow | Wait-Process
}

전체 스크립트와 자세한 정보는 github 에서 찾을 수 있습니다.

누구나 기여할 수 있습니다. 시간이 있으면 스크립트를 더 광범위하게 테스트하고 여기에 정보가 추가 될 때마다 새 패키지를 계속 추가하려고합니다.


0

VC 2012의 모든 레지스트리 값을 얻는 것은 어렵 기 때문에 모든 종속성을 거치고 지정된 버전과 일치하는 작은 함수를 작성했습니다.

public static bool IsVC2012Installed()
{
    string dependenciesPath = @"SOFTWARE\Classes\Installer\Dependencies";

    using (RegistryKey dependencies = Registry.LocalMachine.OpenSubKey(dependenciesPath))
    {
        if (dependencies == null) return false;

        foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft")))
        {
            using (RegistryKey subDir = Registry.LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName))
            {
                var value = subDir.GetValue("DisplayName")?.ToString() ?? null;
                if (string.IsNullOrEmpty(value)) continue;

                if (Regex.IsMatch(value, @"C\+\+ 2012")) //here u can specify your version.
                {
                    return true;
                }
            }
        }
    }

    return false;
}

종속성 :

using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;

-5

레지스트리에서 검색 할 수 있습니다. 실제로 나는 vs2012가 없지만 vs2010이 있습니다.

3 개의 플랫폼 패키지 각각에 대해 3 개의 서로 다른 (그러나 매우 유사한) 레지스트리 키가 있습니다. 각 키에는 값이 1 인 "설치됨"이라는 DWORD 값이 있습니다.

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64

이를 위해 레지스트리 기능을 사용할 수 있습니다.


1
나는 첫 번째 줄에 "VS2012가 없다는 것"이라고 썼습니다. 필요는이 코멘트 없습니다 ............. 그리고 이것은 단지에 대한 VS2010 그래서
vikky

1
당신은 그것을 주목했지만 OP의 질문이기 때문에 솔루션이 VS2012에서도 작동 할 수 있다고 제안하는 것처럼 보였습니다 (그러나 VS2012가 없기 때문에 확인할 수 없음). 이 접근 방식은 실제로 확인한 이후 VS2012에서 작동하지 않는다는 것을 단순히 언급했습니다.
StellarEleven 2013 년

왜 내 대답에 반대표를 던지는 지 ... vs2012에 대한 것이라는 점을 분명히 썼고, 이것은 사용자의 대답으로 받아 들여집니다 .... 그래서 왜 ???????????
vikky

1
x64 비트 OS에서이 값은HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...
bas

1
VS 2012 키는 HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ____ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ___
Adam L '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.