NSIS 로 설치파일을 만들 때, .Net Framework이 설치되어 있지 않은 구형 PC에서 자동으로 다운로드 및 설치가 필요한 경우가 있습니다.
물론 별도로 수동설치 하면 되겠지만 아무래도 자동으로 해당 기능이 포함되어 있으면 사용자 입장에서는 더 편리하겠죠?
다음은 .Net Framework 4.7.2 가 시스템에 없다면 다운로드 해서 설치까지 되도록 하는 부분 입니다.
Section
Call CheckDotNetFramework
SectionEnd
Function CheckDotNetFramework
; .NET Framework 4.7.2를 확인합니다.
; Release DWORD 값은 https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#find-net-framework-versions-by-viewing-the-registry 에서 찾을 수 있습니다.
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release"
IfErrors install
IntCmpU $0 461808 install ; 461808은 .NET Framework 4.7.2의 Release 키 값입니다.
Goto done
install:
DetailPrint ".NET Framework 4.7.2를 다운로드하고 있습니다..."
; .NET Framework 4.7.2 설치파일을 다운로드합니다.
nsisdl::download "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe" "$TEMP\dotNetFx47_Full_setup.exe"
IfErrors downloadFailed
DetailPrint ".NET Framework 4.7.2를 설치하고 있습니다..."
; .NET Framework 4.7.2를 설치합니다.
ExecWait '"$TEMP\dotNetFx47_Full_setup.exe" /q /norestart' $0
IfErrors installFailed
Delete "$TEMP\dotNetFx47_Full_setup.exe"
Goto done
downloadFailed:
MessageBox MB_OK|MB_ICONSTOP "Failed to download .NET Framework 4.7.2."
Abort
installFailed:
MessageBox MB_OK|MB_ICONSTOP "Failed to install .NET Framework 4.7.2."
Abort
done:
FunctionEnd
'개발정보' 카테고리의 다른 글
PIA(Primary Interop Assembly) 란? (0) | 2023.03.21 |
---|---|
COM 개체와 타입 라이브러리(Type Library) (0) | 2023.03.21 |
RCW(Runtime Callable Wrapper)란 (0) | 2023.03.21 |
COM 구성 요소란 (0) | 2023.03.20 |
[.net] interop 과 p/invoke (0) | 2023.03.20 |