본문 바로가기
C++ 200제/코딩 IT 정보

Microsoft Visual C++ 재배포 가능 패키지 설치 확인

by vicddory 2019. 8. 16.

시작하기

WinForms에서 Chromium 브라우저 구성 요소(CefSharp)를 사용하려면 필요한 정보입니다. CefSharp을 사용하려면 Visual Studio C++ 2015 redistributables(재배포 가능 패키지) 이상이 필요합니다.


CefSharp을 사용하여 응용 프로그램을 배포할 때 필요한 오프라인용 Microsoft Visual C++ 설치 배치 작성 내용을 소개합니다.


설치 완료 확인


.NET 응용 프로그램은 AnyCPU로 설정하면, 32bit(x86) 또는 64bit(x64) 여부도 판단해야 합니다.


  • Visual Studio C++ 2015 Redistributable (x86)
  • Visual Studio C++ 2015 Redistributable (x64)

설치 여부를 판단하려면 레지스트리 제거 정보를 확인해야 합니다.


 CPU

 레지스트리 제거 정보

 32bit

 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

 64bit

 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall



vc_redist 폴더 아래, Visual Studio C++ 2015 redistributables(재배포 가능 패키지)가 존재합니다.


  • vc_redist.x86.exe
  • vc_redist.x64.exe




2012에서 Redistributable (x99) 형식으로 통일되어 있습니다만, 그 이전 버전은 통일되지 않았습니다.


이번에는 2015 이상으로 배포되었음을 예로 듭니다. 그래서 Redistributable (x99) 형식으로 추출합니다.


또한, 2015 이상은 버전 번호 대신 연도(2015)로 판단했었습니다. 하지만 2015과 2017은 14로 똑같으니 주의하세요.


 CPU

 레지스트리 제거 정보

 32bit

 Visual Studio C++ 2005 Redistributable

 64bit

 Visual Studio C++ 2005 Redistributable (x64)

 32bit

 Visual Studio C++ 2008 Redistributable - x86 9.0.xxxxx

 64bit

 Visual Studio C++ 2008 Redistributable - x64 9.0.xxxxx

 32bit

 Visual Studio C++ 2010 x86 Redistributable - 10.0.xxxxx

 64bit

 Visual Studio C++ 2010 x64 Redistributable - 10.0.xxxxx

 32bit

 Visual Studio C++ 2012 Redistributable (x86) - 11.0.xxxxx

 64bit

 Visual Studio C++ 2012 Redistributable (x64) - 11.0.xxxxx

 32bit

 Visual Studio C++ 2013 Redistributable (x86) - 12.0.xxxxx

 64bit

 Visual Studio C++ 2013 Redistributable (x64) - 12.0.xxxxx

 32bit

 Visual Studio C++ 2015 Redistributable (x86) - 14.0.xxxxx

 64bit

 Visual Studio C++ 2015 Redistributable (x64) - 14.0.xxxxx

 32bit

 Visual Studio C++ 2017 Redistributable (x86) - 14.16.xxxxx

 64bit

 Visual Studio C++ 2017 Redistributable (x64) - 14.16.xxxxx


배치 버전


배치 파일의 레지스트리 정보 검색(REG QUERY 명령) 기능은 느립니다. 제 경우 1분 이상 걸립니다.


Install.bat

Install.bat



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@echo off
cd /d %~dp0
set vcInstall=0
set vcVersion=2015
 
setlocal enabledelayedexpansion
 
echo Microsoft Visual C++ 재배포 가능 패키지 2015 설치
 
if "%PROCESSOR_ARCHITECTURE%" equ "x86" (
            call :DetectVC x86 HKEY_LOCAL_MACHINE\Software
            if !vcInstall!==0 start /wait vc_redist\vc_redist.x86.exe
)
if "%PROCESSOR_ARCHITECTURE%" equ "AMD64" (
            call :DetectVC x64 HKEY_LOCAL_MACHINE\Software\Wow6432Node
            if !vcInstall!==0 start /wait vc_redist\vc_redist.x64.exe
)
 
endlocal
exit /b
 
REM -------------------------------------------------------
REM Microsoft Visual C++ 재배포 가능 패키지 2015 이상 검출
REM -------------------------------------------------------
:DetectVC
set "vcfindname=Redistributable (%1)"
 
for /"TOKENS=1,2,*" %%A in ('REG QUERY "%2\Microsoft\Windows\CurrentVersion\Uninstall" /s ^| find "DisplayName"'do (
echo %%C | find "%vcfindname%" >NUL
if not ERRORLEVEL 1 (
    set str=%%C
    set vcver=!str:~21,4!
    set vcver=!vcver:ab=0!
    if !vcver! geq %vcVersion% (
        set vcInstall=1
    )
)
)
 
if %vcInstall%==1 (
    echo.
    echo Microsoft Visual C++ 재배포 가능 패키지 2015 이상 설치됨
else (
    echo.
    echo Microsoft Visual C++ 재배포 가능 패키지 2015 이상 설치되지 
)
 
exit /b
cs


VBScript 버전


VBScript를 실행하면 몇 초 내에 설치 판정을 확인할 수 있습니다.

vc_redist 폴더 아래에 CheckVCRedist.vbs 파일을 생성합니다.


CheckVCRedist.vbs

CheckVCRedist.vbs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
'On Error Resume Next
Const HKEY_LOCAL_MACHINE = &H80000002
Const SubKeyName = "Microsoft\Windows\CurrentVersion\Uninstall\"
Const VCVersion = 2015
Dim WshShell, arch, reg, firstkey, keys, key, ret, display_name
Set WshShell = WScript.CreateObject("WScript.Shell")
arch = WshShell.Environment("Process").Item("PROCESSOR_ARCHITECTURE")
If arch = "x86" Then
    firstkey = "SOFTWARE\"
Else
    firstkey = "SOFTWARE\Wow6432Node\"
    arch = "x64"
End If
Set reg = CreateObject("WbemScripting.SWbemLocator").ConnectServer(, "root\default").Get("StdRegProv")
reg.EnumKey HKEY_LOCAL_MACHINE, firstkey & SubKeyName, keys
For Each key In keys
   display_name = ""  
   ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, firstkey & SubKeyName & key, "DisplayName", display_name)
   If Instr(display_name, "Redistributable (" & arch & ")") > 0 Then
       If CInt(Mid(display_name, 22, 4)) >= VCVersion Then
           Wscript.Quit(1)
       End If
   End If
Next
Wscript.Quit(0)
cs



검색 내용을 "cscript //nologo vc_redist\CheckVCRedist.vbs"로 변경합니다.


Install.bat

Install.bat



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@echo off
cd /d %~dp0
set vcInstall=0
set vcVersion=2015
 
echo Microsoft Visual C++ 재배포 가능 패키지 2015 설치
call :DetectVC
 
if "%PROCESSOR_ARCHITECTURE%" equ "x86" (
            if %vcInstall%==0 start /wait vc_redist\vc_redist.x86.exe
)
if "%PROCESSOR_ARCHITECTURE%" equ "AMD64" (
            if %vcInstall%==0 start /wait vc_redist\vc_redist.x64.exe
)
 
exit /b
 
REM -------------------------------------------------------
REM Microsoft Visual C++ 재배포 가능 패키지 2015 이상 검출
REM -------------------------------------------------------
:DetectVC
 
cscript //nologo vc_redist\CheckVCRedist.vbs
 
set vcInstall=%ERRORLEVEL%
 
if %vcInstall%==1 (
    echo.
    echo Microsoft Visual C++ 재배포 가능 패키지 2015 이상 설치됨
else (
    echo.
    echo Microsoft Visual C++ 재배포 가능 패키지 2015 이상 설치되지 
)
 
exit /b
cs




마지막으로


REG QUERY 명령이 이렇게 느린 줄 알았는데 실제로 돌려보니 진짜로 느렸습니다. 처음 한 번은 해볼만한데, 여러번 돌려봐야 한다면, VBScript 버전이 빠르고 좋습니다.


참고


VisualStudio2012, XP 배포 설정

https://codingcoding.tistory.com/451


재배포패키지 다운로드

https://codingcoding.tistory.com/502


Microsoft Visual C++ 삭제

https://codingcoding.tistory.com/1095


비주얼 스튜디오 2010 마우스 휠 막기

https://codingcoding.tistory.com/699

댓글