본문 바로가기

프로그래밍/Inno Setup

Inno Setup 닷넷 프레임워크 먼저 설치하기(.NET Framework before install)





Inno Setup 닷넷 프레임워크 먼저 설치하기(.NET Framework before install)


만든 프로그램이 실행되기 전에 닷넷을 먼저 설치하는 경우가 있습니다.


예로 닷넷4.5 기반으로 만든 프로그램을 실행해야되는데, 컴퓨터에 닷넷4.5 이상 설치되있는지 확인하고 없으면 설치하는 절차가 필요한 경우가 있습니다.


구글 여기저기 방법이 많지만 입맛에 맞게 정리해서 올려봅니다.


[Code] 부분에 아래 코드를 추가합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Code]
procedure Net452Install();
var
  ResultCode: Integer;
begin
  //.NET 4.5.2 
  Exec(ExpandConstant('{app}')+'\NDP452-KB2901907-x86-x64-AllOS-ENU.exe''/norestart''', SW_SHOW, ewWaitUntilTerminated, ResultCode)
end;
 
function Framework45IsNotInstalled(): Boolean;
var
  bSuccess: Boolean;
  regVersion: Cardinal;
begin
  Result := True;
//.NET Framework 버전 DWORD값 확인
// https://docs.microsoft.com/ko-kr/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
  bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full''Release', regVersion);
  if (True = bSuccess) and (regVersion >= 378389) then begin
    Result := False;
  end;
end;
cs


그리고 [Files] 부분에 아래처럼 작성합니다.

1
2
3
4
5
Source: "D:\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"; \
        DestDir: {app}; \
        Flags: ignoreversion; \
        BeforeInstall: Net452Install; \
        Check: Framework45IsNotInstalled;
cs

Source는 현재 닷넷프레임워크 설치 파일이 있는 위치를 작성합니다.

DestDir은 이 파일이 어는 위치로 복사될지 명시하는 부분입니다. {app}는 프로그램이 설치되는 경로를 의미합니다.

BeforeInstall 이 플래그가 파일이 설치되기 전에 실행하는 부분입니다. Net452Install은 [Code]에 작성한 함수이름입니다.

Check는 Framework45IsNotInstalled 함수 리턴값이 True 일때 BeforeInstall에 명시된 Net452Install 함수를 실행합니다.