NSIS를 통해 설치하고자 하는 프로그램에 따라 Visual C++ 라이브러리를 필요로 한다.
제어판의 프로그램 추가/제거 부분에서 해당 라이브러리가 설치되어 있는지 확인할 수 있지만, NSIS를 통해 설치 프로그램을 만들고 있고 VC++의 버전을 체크하여 사용자의 PC 환경에 설치되어 있지 않을 경우 설치해 드리기 위한 방법이다.
재배포 패키지 설치 유무 확인
Visual C++를 사용하여 개발된 응용 프로그램을 설치할 경우 Visual C++ 프로그램이 설치되어 있지 않은 컴퓨터에서 실행하기 위해 해당 Visual C++ 라이브러리의 런타임 구성 요소가 설치되어 있는지 확인해야 한다.
일반적으로 레지스트리에서 추가/제거 목록을 확인할 수 있다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{ProductCode
}
버전에 따른 ProductCode를 체크하는 방법으로 설치 유무를 판단하는 것이다. (다음의 예시는 NSIS로 VC++ 2008 Redistributables 체크하고 설치하는 코드이다.)
;----------------------------------------------------------
; Visual C++ 2008 Redistributable 9.0.30729.6161 설치
; 해당 버전에 따라 아래 내용이 바뀌며 다른 버전 설치 시 ReadRegDword의 주소를 변경해 주어야 한다.
; Function .onInstSuccess란 실제 설치 파일들이 압축이 풀리면 실행해 준다.
;----------------------------------------------------------
Function .onInstSuccess
Call CheckVCRedist
Pop $R9
StrCmp $R9 "No" 0 +3
MessageBox MB_OK|MB_ICONSTOP "프로그램 실행을 위해 Visual C++ 2008 Redistributable를 설치합니다."
ExecWait "$INSTDIR\vcredist_x86.exe"
FunctionEnd
Function CheckVCRedist
Push $R9
ClearErrors
ReadRegDword $R9 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9BE518E6-ECC6-35A9-88E4-87755C07200F}" "Version"
; if VS 2005+ redist SP1 not installed, install it
IfErrors 0 VSRedistInstalled
StrCpy $R9 "No"
VSRedistInstalled:
Exch $R9
FunctionEnd
만약 Visual C++ 2008 라이브러리가 설치되어 있지 않다면 "프로그램 실행을 위해 Visual C++ 2008 Redistributable를 설치합니다."라는 메시지 박스를 띄운 뒤 사용자가 OK(승인)하면, ExexWait
명령에 의해 설치 디렉터리의 vcredist_x86.exe를 실행하여 VC++ 라이브러리를 설치하게 된다.
[중요] 레지스트리 주소와 관련하여... (2018.08.23 추가 내용)
참고로 위의 스크립트는 WIndows XP 시절에 작성했던 것이다. 만약 Windows 7 환경 이상이라면 (아마도...) 위 스크립트의 17번째 라인의 레지스트리 경로가 다르다는 것이다.
버전별 주소는 다음의 링크의 답변을 참고하면 된다.
재배포 패키지 버전별 ProductCode
참고로 아래 코드는 영문버전 기준이고, 한글버전의 경우 다를 수 있다...고 한다.
Visual C++ 2005 (8.0)
Visual C++ 2005 runtime
- Visual C++ 2005 Redistributable Package (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
- Visual C++ 2005 Redistributable Package (x64) – {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
- Visual C++ 2005 Redistributable Package (ia64) – {03ED71EA-F531-4927-AABD-1C31BCE8E187}
Visual C++ 2005 SP1 runtime
- Visual C++ 2005 SP1 Redistributable Package (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
- Visual C++ 2005 SP1 Redistributable Package (x64) – {071C9B48-7C32-4621-A0AC-3F809523288F}
- Visual C++ 2005 SP1 Redistributable Package (ia64) – {0F8FB34E-675E-42ED-850B-29D98C2ECE08}
Visual C++ 2008 (9.0)
Visual C++ 2008 runtime
- Visual C++ 2008 Redistributable Package (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
- Visual C++ 2008 Redistributable Package (x64) – {350AA351-21FA-3270-8B7A-835434E766AD}
- Visual C++ 2008 Redistributable Package (ia64) – {2B547B43-DB50-3139-9EBE-37D419E0F5FA}
Visual C++ 2008 SP1 runtime
- Visual C++ 2008 SP1 Redistributable Package (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
- Visual C++ 2008 SP1 Redistributable Package (x64) – {8220EEFE-38CD-377E-8595-13398D740ACE}
- Visual C++ 2008 SP1 Redistributable Package (ia64) – {5827ECE1-AEB0-328E-B813-6FC68622C1F9}
Visual C++ 2010 (10.0)
Visual C++ 2010 runtime
- Visual C++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
- Visual C++ 2010 Redistributable Package (x64) – {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
- Visual C++ 2010 Redistributable Package (ia64) – {C1A35166-4301-38E9-BA67-02823AD72A1B}
Visual C++ 2010 SP1 runtime
- Visual C++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
- Visual C++ 2010 SP1 Redistributable Package (x64) – {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
- Visual C++ 2010 SP1 Redistributable Package (ia64) – {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
'유틸리티 > NSIS' 카테고리의 다른 글
[NSIS] 바로가기 생성 및 아이콘 변경 (0) | 2016.04.04 |
---|---|
[NSIS] 언인스톨 섹션 (1) | 2016.04.01 |
[NSIS] Scripting Reference (0) | 2016.03.31 |
[NSIS] MUI 헤더 이미지 추가하기 (0) | 2016.03.28 |
[NSIS] 꼭 필요한 스크립트와 기본적인 MUI 적용 (0) | 2016.03.25 |