출처 : http://discafe.tistory.com/entry/inno-setup-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
이번에 스프링 부트로 개발을 했는데,
솔루션 형식으로 설치파일로 배포할 일이 생겼다.
그리하여 Inno Setup을 처음 써보게 되었는데 다음과 같이 스크립트를 작성하였다.
#define zuluPath "origin\zulu8.31.0.1-jdk8.0.181-win_x64"
#define TomcatSourcePath "origin\apache-tomcat-9.0.10-windows-x64"
#define readMeFile "origin\readme.txt"
#define createServiceFile "origin\createService.bat"
[Setup]
AppId={{********-****-****-****-************}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={sd}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=my_app
Compression=lzma
SolidCompression=yes
ChangesEnvironment=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "{#zuluPath}\*"; DestDir: "{app}\zulu"; Flags: ignoreversion recursesubdirs
Source: "{#TomcatSourcePath}\*"; DestDir: "{app}\Tomcat"; Flags: ignoreversion recursesubdirs
Source: "{#readMeFile}"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#createServiceFile}"; DestDir: "{app}"; Flags: ignoreversion
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\zulu\bin"; Check: NeedsAddPath('{app}\zulu\bin')
[Run]
Filename: "{cmd}"; Parameters: "/c setx /m JAVA_HOME ""{app}\zulu"" "; Flags: runhidden
Filename: "{cmd}"; Parameters: "/c setx /m JRE_HOME ""{app}\zulu\jre"" "; Flags: runhidden
Filename: "{cmd}"; Parameters: "/c setx /m CATALINA_HOME ""{app}\Tomcat"" "; Flags: runhidden
Filename: "{cmd}"; Parameters: "/c explorer ""{app}"" "; Flags: runhidden
Filename: "{cmd}"; Parameters: "/c readme.txt"; WorkingDir: "{app}";
[UninstallRun]
Filename: "{cmd}"; Parameters: "/c sc delete my_app"; Flags: runhidden
[Code]
function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
'Path', OrigPath)
then begin
Result := True;
exit;
end;
Param := ExpandConstant(Param);
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;
이렇게 하면 설치파일이 생성되고, 서비스 등록까지 한 번에 하려고 했는데
환경변수 갱신이 되지 않아서 따로 배치파일을 만들고 사용자가 실행하도록 만들었다.
@ECHO OFF
ECHO @기존 서비스 삭제
sc stop my_app
sc delete my_app
ECHO @서비스 등록
Tomcat\bin\Service.bat INSTALL my_app
pause
정상적으로 동작이 되긴 하더라.
추가적으로 방화벽 풀기, 윈도우즈 업데이트 막기 등이 있었는데 나는 직접 풀기로 하고 설정하지 않았다.
아래는 테스트 해보지 않음.
;윈도우 설정인 전원 옵션
;set power option
Filename: "{cmd}"; Parameters: "/c powercfg -change -monitor-timeout-ac 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -monitor-timeout-dc 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -disk-timeout-ac 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -disk-timeout-dc 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -standby-timeout-ac 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -standby-timeout-dc 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -hibernate-timeout-ac 0"; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c powercfg -change -hibernate-timeout-dc 0"; Flags:"runhidden";
;윈도우 방화벽 제거
;set firewall stop
Filename: "{cmd}"; Parameters: "/c sc stop ""MpsSvc"""; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c sc config ""MpsSvc"" start= disabled"; Flags:"runhidden";
;윈도우 업데이트 방지
;set window update stop
Filename: "{cmd}"; Parameters: "/c sc stop ""wuauserv"""; Flags:"runhidden";
Filename: "{cmd}"; Parameters: "/c sc config ""wuauserv"" start= disabled"; Flags:"runhidden";
;자바 업데이트 방지
;java update
Filename: "{cmd}"; Parameters: "C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f"; Flags:"shellexec runhidden";
;레지스트리 등록, 자바 업데이트 방지
;disable java update
[Registry]
Root: HKLM; Subkey: "SOFTWARE\JavaSoft\Java Update\Policy"; ValueType: dword; ValueName: "EnableJavaUpdate"; ValueData: "0";
;디렉 토리 삭제
[InstallDelete]
Type: filesandordirs; Name: "{#TOMCAT}\webapps\ROOT";