public:computer:nsis

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 09:56] – [Preparing Files] alexpublic:computer:nsis [2022/07/20 17:04] – [Scripts] alex
Line 3: Line 3:
  
 ===== Setting Environment ===== ===== Setting Environment =====
-  - NSIS Install +  - NSIS Install; Nullsoft Install System을 설치한다. 
-  - HM NIS Edit Install +  - HM NIS Edit Install; HM NIS Edit를 설치한다 
-  - Install Plugins+  - Install Plugins; 아래 플러그인을 NSIS 설치한 위치의 Plugins 디렉토리로 복사한다.
     * EnVar-Plugin     * EnVar-Plugin
     * Nsis7z plug-in     * Nsis7z plug-in
Line 11: Line 11:
  
 ===== Preparing Files ===== ===== Preparing Files =====
-  * NSIS Script file; *.nsi +  * 설치 패키지를 위한 파일을 준비한다.  (ustra.7z = VSCode + STS4 + git + node.js + yarn + ..., ustra.ico) 
-  * Prepare files to install +  * NSIS Script file; 설치 패키지를 만드는 스크립트, *.nsi (ustra-dev-tools.nsi) 
-    * make 7z file into Input directory <sxh plaintext>+  * Prepare files to install; 설치할 파일을 준비한다. 
 +    * 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 26: Line 27:
     └─workspace     └─workspace
 </sxh> </sxh>
-  * Create Output Directory +  * Create Output Directory; 설치 패키지의 최종 결과 파일을 저장할 디렉토리를 생성한다. 
-  * Structures <sxh plaintext>+  * Structures; 설치 패키지를 위한 디렉토리 구조는 아래와 같다. <sxh plain; gutter: false>
     └─*.nsi     └─*.nsi
        ├─Input        ├─Input
 +         ├─ustra.ico
        │   └─ustra.7z        │   └─ustra.7z
        └─Output        └─Output
Line 36: 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 운영체제에 빌드한 설치 파일을 복사한다.
 +    * 설치 파일을 이용하여 프로그램을 설치한다.
 +    * 설치한 프로그램 동작을 확인한다.
 +      * SpringToolSuite4
 +      * VSCode
 +      * Node.js
 +      * Yarn
 +      * Git
 +    * 시스템 환경 변수 편집 혹은 CMD 등에서 환경 설정 내용을 확인한다; JAVA_HOME, GRADLE_HOME, MAVEN_HOME, Path
 +    * 확인 후 의도한 대로 설치되지 않았으면 스크립트 수정 후 빌드 -> 테스트를 다시 진행하고, 의도한 대로 설치되었다면 다른 Windows 시스템에도 테스트 진행하여 확인한다. 다시 테스트를 진행하기 전에 반드시 이전 설치 및 설정된 내역을 리셋한다. (Uninstall, Windows 복귀 등)
 +    * 확인이 완료되면 배포한다.
  
  
 ===== References ===== ===== References =====
-  * [[https://nsis.sourceforge.io/Download|NSIS Download]] +  * 개발 환경 및 관련 리소스는 아래의 링크에서 확인할 수 있다. 
-  * [[https://nsis.sourceforge.io/Docs/|NSIS Users Manual]] +    * [[https://nsis.sourceforge.io/Download|NSIS Download]] 
-  * [[https://nsis.sourceforge.io/Wiki/|NSIS Wiki]] +    * [[https://nsis.sourceforge.io/Docs/|NSIS Users Manual]] 
-  * [[http://hmne.sourceforge.net/|HM NIS EDIT: A Free NSIS Editor/IDE]] +    * [[https://nsis.sourceforge.io/Wiki/|NSIS Wiki]] 
-  * [[https://nsis.sourceforge.io/Nsis7z_plug-in|Nsis7z_plguin]] +    * [[http://hmne.sourceforge.net/|HM NIS EDIT: A Free NSIS Editor/IDE]] 
-  * [[https://github.com/GsNSIS/EnVar|EvVar Plugin for NSIS]] +    * [[https://nsis.sourceforge.io/Nsis7z_plug-in|Nsis7z_plguin]] 
-  * [[https://opentutorials.org/module/3650/21851|NSIS 사용자 설명서 @opentutorials.org]]+    * [[https://github.com/GsNSIS/EnVar|EvVar Plugin for NSIS]] 
 +    * [[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