반응형

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

+ Recent posts