Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revisionBoth sides next revision
public:computer:nsis [2022/07/20 11:11] alexpublic:computer:nsis [2022/07/20 17:04] – [Scripts] alex
Line 5: Line 5:
   - NSIS Install; Nullsoft Install System을 설치한다.   - NSIS Install; Nullsoft Install System을 설치한다.
   - HM NIS Edit Install; HM NIS Edit를 설치한다   - HM NIS Edit Install; HM NIS Edit를 설치한다
-  - Install Plugins; 아래 플러그인을 NSIS 설치 위치의 Plugins 디렉토리로 복사한다.+  - Install Plugins; 아래 플러그인을 NSIS 설치한 위치의 Plugins 디렉토리로 복사한다.
     * EnVar-Plugin     * EnVar-Plugin
     * Nsis7z plug-in     * Nsis7z plug-in
Line 11: Line 11:
  
 ===== Preparing Files ===== ===== Preparing Files =====
-  * 설치 패키지를 위한 파일을 준비한다.  +  * 설치 패키지를 위한 파일을 준비한다.  (ustra.7z = VSCode + STS4 + git + node.js + yarn + ..., ustra.ico) 
-  * NSIS Script file; 설치 패키지를 만드는 스크립트, *.nsi+  * NSIS Script file; 설치 패키지를 만드는 스크립트, *.nsi (ustra-dev-tools.nsi)
   * Prepare files to install; 설치할 파일을 준비한다.   * Prepare files to install; 설치할 파일을 준비한다.
-    * make 7z file into Input directory <sxh plaintext>+    * make 7z file into Input directory; 생성한 ustra.7z 파일을 Input 디렉토리에 넣는다. <sxh plain; gutter: false>
     ├─tools     ├─tools
     │  ├─apache-maven-3.8.1     │  ├─apache-maven-3.8.1
Line 28: Line 28:
 </sxh> </sxh>
   * Create Output Directory; 설치 패키지의 최종 결과 파일을 저장할 디렉토리를 생성한다.   * Create Output Directory; 설치 패키지의 최종 결과 파일을 저장할 디렉토리를 생성한다.
-  * Structures; 설치 패키지를 위한 디렉토리 구조는 아래와 같다. <sxh plaintext>+  * Structures; 설치 패키지를 위한 디렉토리 구조는 아래와 같다. <sxh plain; gutter: false>
     └─*.nsi     └─*.nsi
        ├─Input        ├─Input
Line 38: Line 38:
  
 ===== Scripts ===== ===== Scripts =====
-  * 스크립트를 작성다.+  * HM NIS Edit 를 실행한다. \\ {{:public:computer:2022-07-20_14_30_27.gif|}} 
 +  * 스크립트를 작성하거나 작성된 스크립트 파일을 연다. \\ {{:public:computer:2022-07-20_14_02_31-cut2.gif|}}<sxh plain> 
 +; Script generated by the HM NIS Edit Script Wizard. 
 + 
 +; HM NIS Edit Wizard helper defines 
 +!define PRODUCT_NAME "U.STRA Framework 개발 환경" 
 +!define PRODUCT_VERSION "0.1" 
 +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
 +!define PRODUCT_UNINST_ROOT_KEY "HKLM" 
 + 
 +; MUI 1.67 compatible ------ 
 +!include "MUI.nsh" 
 + 
 +; MUI Settings 
 +!define MUI_ABORTWARNING 
 +;!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" 
 +!define MUI_ICON ".\Input\ustra.ico" 
 +;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" 
 +!define MUI_UNICON ".\Input\ustra.ico" 
 + 
 +; Welcome page 
 +!insertmacro MUI_PAGE_WELCOME 
 +; Directory page 
 +!insertmacro MUI_PAGE_DIRECTORY 
 +; Instfiles page 
 +;!define MUI_FINISHPAGE_NOAUTOCLOSE 
 +!insertmacro MUI_PAGE_INSTFILES 
 +; Finish page 
 +!insertmacro MUI_PAGE_FINISH 
 + 
 +; Uninstaller pages 
 +!insertmacro MUI_UNPAGE_INSTFILES 
 + 
 +; Language files 
 +!insertmacro MUI_LANGUAGE "Korean" 
 + 
 +; MUI end ------ 
 + 
 +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" 
 +OutFile ".\Output\Setup_UStra_Dev.exe" 
 +;InstallDir "$PROGRAMFILES\U.STRA Framework 개발 환경" 
 +InstallDir "C:\ustra_devtools" 
 +ShowInstDetails show 
 +ShowUnInstDetails show 
 + 
 +; Global Variables -------- 
 +Var fileSTS4Ini 
 +Var fileGitInstaller 
 +Var fileNodejsInstaller 
 +Var fileYarnInstaller 
 + 
 + 
 +Function InitInstallers 
 +  StrCpy $fileSTS4Ini "$INSTDIR\tools\sts-4.7.1\SpringToolSuite4.ini" 
 +  StrCpy $fileGitInstaller "$INSTDIR\tools\Git-2.37.0-64-bit.exe" 
 +  StrCpy $fileNodejsInstaller "$INSTDIR\tools\node-v12.22.9-x64.msi" 
 +  StrCpy $fileYarnInstaller "$INSTDIR\tools\yarn-1.22.19.msi" 
 +FunctionEnd 
 + 
 +Function WriteSTS4IniFile 
 +  ; Write SpringToolSuite4.ini file 
 +  ;FileOpen $9 $INSTDIR\tools\sts-4.7.1\SpringToolSuite4.ini w        ; Opens a Empty File and fills it 
 +  FileOpen $9 $fileSTS4Ini w        ; Opens a Empty File and fills it 
 +  FileWrite $9 "-startup$\r$\n\ 
 +            plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar$\r$\n\ 
 +            --launcher.library$\r$\n\ 
 +            plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1200.v20200508-1552$\r$\n\ 
 +            -product$\r$\n\ 
 +            org.springframework.boot.ide.branding.sts4$\r$\n\ 
 +            --launcher.defaultAction$\r$\n\ 
 +            openFile$\r$\n\ 
 +            -vm$\r$\n\ 
 +            $INSTDIR\tools\java\java-1.8.0-openjdk-1.8.0.212-1\bin\javaw.exe$\r$\n\ 
 +            -vmargs$\r$\n\ 
 +            -Dosgi.requiredJavaVersion=1.8$\r$\n\ 
 +            -Dosgi.dataAreaRequiresExplicitInit=true$\r$\n\ 
 +            -Xms256m$\r$\n-Xmx2048m$\r$\n\ 
 +            --add-modules=ALL-SYSTEM$\r$\n\ 
 +            -javaagent:$INSTDIR\tools\sts-4.7.1\lombok.jar$\r$\n\ 
 +            -Dfile.encoding=UTF-8$\r$\n" 
 +  FileClose $9 ; Closes the filled file 
 +FunctionEnd 
 + 
 +Function AddEnvironmentVariablesInHKCU 
 +  ; add Environment Variables 
 +  EnVar::Check "temp" "NULL" 
 +  Pop $0 
 +  DetailPrint "EnVar::Check temp:NULL returned=|$0|" 
 +  ; JAVA_HOME 
 +  EnVar::AddValue "JAVA_HOME" "$INSTDIR\tools\java\java-1.8.0-openjdk-1.8.0.212-1" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue JAVA_HOME returned=|$0|" 
 +  ; GRADLE_HOME 
 +  EnVar::AddValue "GRADLE_HOME" "$INSTDIR\tools\gradle-6.9.2" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue GRADLE_HOME returned=|$0|" 
 +  ; MAVEN_HOME 
 +  EnVar::AddValue "MAVEN_HOME" "$INSTDIR\tools\apache-maven-3.8.1" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue MAVEN_HOME returned=|$0|" 
 +FunctionEnd 
 + 
 +Function AddPathsInHKCU 
 +  ; add Paths 
 +  EnVar::AddValueEx "Path" "%JAVA_HOME%\bin" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue Path %JAVA_HOME%\bin = |$0|" 
 +  EnVar::AddValueEx "Path" "%GRADLE_HOME%\bin" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue Path %GRADLE_HOME%\bin = |$0|" 
 +  EnVar::AddValueEx "Path" "%MAVEN_HOME%\bin" 
 +  Pop $0 
 +  DetailPrint "EnVar::AddValue Path %MAVEN_HOME%\bin = |$0|" 
 +  ;DetailPrint "EnVar::Update HKLM JAVA_HOME returned=|$0|" 
 +  ;EnVar::Check "NULL" "NULL" 
 +  ;Pop $0 
 +  ;DetailPrint "EnVar::Check write access HKCU returned=|$0|" 
 +FunctionEnd 
 + 
 +Function InstallGit 
 +  ; Install git 
 +;  ExecWait "$INSTDIR\tools\Git-2.36.1-64-bit.exe" 
 +  ExecWait $fileGitInstaller ;"$INSTDIR\tools\Git-2.37.0-64-bit.exe" 
 +FunctionEnd 
 + 
 +Function InstallNodejs 
 +  ; Install Node.js v12.22.9 
 +  ReadRegStr $R0 HKLM "SOFTWARE\Node.js" "Version" 
 + 
 +  ${If} $R0 == "" 
 +    ;ExecWait 'C:\Windows\SysWOW64\msiexec.exe /i "$INSTDIR\tools\node-v12.22.9-x64.msi"' 
 +    ExecWait 'C:\Windows\SysWOW64\msiexec.exe /i $fileNodejsInstaller' 
 +  ${Else} 
 +    ${If} $R0 == "12.22.9" 
 +      ; already installed, skip this step 
 +    ${Else} 
 +      ; uninstall different version and install v12.22.9 version 
 +      ExecWait "C:\Windows\SysWOW64\msiexec.exe /x {C1B586E6-C075-42F3-B7E4-0DE4222DEEC0}" 
 +      ;ExecWait 'C:\Windows\SysWOW64\msiexec.exe i "$INSTDIR\tools\node-v12.22.9-x64.msi"' 
 +      ExecWait 'C:\Windows\SysWOW64\msiexec.exe i $fileNodejsInstaller' 
 +    ${EndIf} 
 +  ${EndIf} 
 +FunctionEnd 
 + 
 +Function InstallYarn 
 +  ; Install Yarn 
 +;  ExecWait 'C:\Windows\SysWOW64\msiexec.exe /i "$INSTDIR\tools\yarn-1.22.4.msi"' 
 +  ExecWait 'C:\Windows\SysWOW64\msiexec.exe /i $fileYarnInstaller' 
 +FunctionEnd 
 + 
 +Function CreateDesktopShortcuts 
 +  ; Create Desktop Shortcuts 
 +  CreateShortCut "$DESKTOP\U.STRA Framework 개발 환경 - VSCODE.lnk" "$INSTDIR\tools\VSCode-win32-x64-1.48.0\Code.exe" 
 +  CreateShortCut "$DESKTOP\U.STRA Framework 개발 환경 - STS.lnk" "$INSTDIR\tools\sts-4.7.1\SpringToolSuite4.exe" "-data $INSTDIR\workspace" 
 +FunctionEnd 
 + 
 +Section "MainSection" SEC01 
 +  SetOutPath "$INSTDIR" 
 +  SetOverwrite ifnewer 
 +  File ".\Input\ustra.7z" 
 +   
 +  ; First above all, Extract Compressed file 
 +  Nsis7z::ExtractWithDetails "$INSTDIR\ustra.7z" "Unpacking %s..." 
 + 
 +  ; Set Variables to Install 
 +  Call InitInstallers 
 +  ; Set SpringToolSuite4.ini File 
 +  Call WriteSTS4IniFile 
 +   
 +  ; Install Utilities 
 +  ; Install Node.js 
 +  Call InstallNodejs 
 +  ; Install Yarn 
 +  Call InstallYarn 
 +  ; Install Git 
 +  Call InstallGit 
 +   
 +  ; Set Environment Variables, HKEY_CURRENT_USER 
 +  ; Add Environment Values; JAVA_HOME, GRADLE_HOME, MAVEN_HOME 
 +  Call AddEnvironmentVariablesInHKCU 
 +  ; Add Paths; %JAVA_HOME%\bin, %GRADLE_HOME%\bin, %MAVEN_HOME%\bin 
 +  Call AddPathsInHKCU 
 +   
 +  ; Create Desktop Shortcuts for VSCode, STS4 
 +  Call CreateDesktopShortcuts 
 +   
 +  ; When installation completed, delete compressed file 
 +  Delete "$INSTDIR\ustra.7z" 
 + 
 +SectionEnd 
 + 
 +Section -AdditionalIcons 
 +  CreateDirectory "$SMPROGRAMS\U.STRA Framework 개발 환경" 
 +  CreateShortCut "$SMPROGRAMS\U.STRA Framework 개발 환경\Uninstall.lnk" "$INSTDIR\uninst.exe" 
 +SectionEnd 
 + 
 +Section -Post 
 +  WriteUninstaller "$INSTDIR\uninst.exe" 
 +  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" 
 +  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" 
 +  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 
 +SectionEnd 
 + 
 + 
 +Function un.onUninstSuccess 
 +  HideWindow 
 +  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name)는(은) 완전히 제거되었습니다." 
 +FunctionEnd 
 + 
 +Function un.onInit 
 +  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(^Name)을(를) 제거하시겠습니까?" IDYES +2 
 +  Abort 
 +FunctionEnd 
 + 
 +Section Uninstall 
 +;  Delete "$INSTDIR\uninst.exe" 
 +;  Delete "$INSTDIR\ustra.7z" 
 +;  Delete "$INSTDIR\tools\sts-4.7.1\SpringToolSuite4.ini" 
 + 
 +  ; Delete environment variables 
 +  ; JAVA_HOME 
 +  ;EnVar::Delete "JAVA_HOME" 
 +  EnVar::DeleteValue "JAVA_HOME" "$INSTDIR\tools\java\java-1.8.0-openjdk-1.8.0.212-1" 
 +  ; GRADLE_HOME 
 +  ;EnVar::Delete "GRADLE_HOME" 
 +  EnVar::DeleteValue "GRADLE_HOME" "$INSTDIR\tools\gradle-6.9.2" 
 +  ; MAVEN_HOME 
 +  ;EnVar::Delete "MAVEN_HOME" 
 +  EnVar::DeleteValue "MAVEN_HOME" "$INSTDIR\tools\apache-maven-3.8.1" 
 +  EnVar::Delete "" 
 + 
 +  ; Delete Path 
 +  EnVar::DeleteValue "Path" "%JAVA_HOME%\bin" 
 +  EnVar::DeleteValue "Path" "%GRADLE_HOME%\bin" 
 +  EnVar::DeleteValue "Path" "%MAVEN_HOME%\bin" 
 + 
 +  Delete "$SMPROGRAMS\U.STRA Framework 개발 환경\Uninstall.lnk" 
 + 
 +  Delete "$DESKTOP\U.STRA Framework 개발 환경 - VSCODE.lnk" 
 +  Delete "$DESKTOP\U.STRA Framework 개발 환경 - STS.lnk" 
 +   
 +  RMDir "$SMPROGRAMS\U.STRA Framework 개발 환경" 
 +  RMDir /r "$INSTDIR" 
 + 
 +  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" 
 +  SetAutoClose true 
 +SectionEnd 
 +</sxh>
  
 ===== Build & Test ===== ===== Build & Test =====
-  * Build; 작성한 스크립트를 빌드한다. 오류가 없으면 설치 파일이 생성된다.+  * Build; 작성한 스크립트를 빌드한다. 오류가 없으면 설치 파일이 생성된다. \\ {{:public:computer:hmnisedit_000_script_compile.png?500|}}{{:public:computer:hmnisedit_001_compile_result.png?500|}}
   * Test on Windows   * Test on Windows
     * 설치 테스트를 위한 Windows 운영체제를 준비한다; 포맷 후 Windows만 설치한 PC 혹은 Hyper-V, VMWare, Virtual Box 등의 가상 머신에 Windows 설치. (가능한 한 응용 프로그램을 설치하지 않은 Windows 운영체제를 추천)     * 설치 테스트를 위한 Windows 운영체제를 준비한다; 포맷 후 Windows만 설치한 PC 혹은 Hyper-V, VMWare, Virtual Box 등의 가상 머신에 Windows 설치. (가능한 한 응용 프로그램을 설치하지 않은 Windows 운영체제를 추천)
Line 53: Line 300:
       * Git       * Git
     * 시스템 환경 변수 편집 혹은 CMD 등에서 환경 설정 내용을 확인한다; JAVA_HOME, GRADLE_HOME, MAVEN_HOME, Path     * 시스템 환경 변수 편집 혹은 CMD 등에서 환경 설정 내용을 확인한다; JAVA_HOME, GRADLE_HOME, MAVEN_HOME, Path
-    * 확인 후 의도한 대로 설치되지 않았으면 스크립트 수정 후 빌드 -> 테스트를 다시 진행하고, 의도한 대로 설치되었다면 다른 Windows 시스템에도 테스트 진행하여 확인한다.+    * 확인 후 의도한 대로 설치되지 않았으면 스크립트 수정 후 빌드 -> 테스트를 다시 진행하고, 의도한 대로 설치되었다면 다른 Windows 시스템에도 테스트 진행하여 확인한다. 다시 테스트를 진행하기 전에 반드시 이전 설치 및 설정된 내역을 리셋한다. (Uninstall, Windows 복귀 등)
     * 확인이 완료되면 배포한다.     * 확인이 완료되면 배포한다.
  
Line 66: Line 313:
     * [[https://github.com/GsNSIS/EnVar|EvVar Plugin for NSIS]]     * [[https://github.com/GsNSIS/EnVar|EvVar Plugin for NSIS]]
     * [[https://opentutorials.org/module/3650/21851|NSIS 사용자 설명서 @opentutorials.org]]     * [[https://opentutorials.org/module/3650/21851|NSIS 사용자 설명서 @opentutorials.org]]
 +
 +  * {{:public:computer:2022-07-20_14_02_31.gif?200|}}{{:public:computer:2022-07-20_14_02_31-cut.gif?200|}}
  • public/computer/nsis.txt
  • Last modified: 2022/07/20 17:05
  • by alex