개발을 하다보면 셋업프로그램을 만들어야 하는 경우가 발생합니다.

또한 업데이트에 대한 고민도 해야 합니다.

 

그중 하나인 셋업에 대한 부분 중 제가 만든 것을 약간 정리해봤습니다

 

도움이 되었으면 합니다

 

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
;-----------------------------------------------------------------------------------------------------------------------
;##### 제품 이름, 버전, 업데이트 버전, 레지스트리 등록이름, 업체명, 업체 URL, 업체 홈페이지 표시 이름, 런타임 명
;-----------------------------------------------------------------------------------------------------------------------
!define PRODUCT_NAME "제품명"    ;예)블럭노리
!define PRODUCT_VERSION "버전정보"  ;예) 1.0
!define APP_AUTORUN_REGNAME "레지스트리 등록이름"    ; 시스템 시작시 자동 시작 레지스트리 이름
!define PRODUCT_PUBLISHER "제작사"   ;예) New & Now Inc.
!define PRODUCT_WEB_SITE "웹사이트 주소" ;예) http://www.newnnow.co.kr
!define HOMEPAGE_NAME "바탕화면 홈페이지 단축아이콘 명"  ;예)New & Now 홈페이지
!define RUNTIME_VERSION "Adobe AIR"

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 완료 후 실행파일명
;-----------------------------------------------------------------------------------------------------------------------
!define APP_EXENAME "실행파일명" ;예) 어플최초 실행명  Blocknori.exe

;-----------------------------------------------------------------------------------------------------------------------
;##### 레지스트리 등록을 위한 정보
;-----------------------------------------------------------------------------------------------------------------------
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${APP_EXENAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_AUTORUN_REGNAME}"
!define PRODUCT_PASSDIR_REGKEY "Software\${APP_AUTORUN_REGNAME}"
!define PRODUCT_UNINST_RUNTIME "Software\Microsoft\Windows\CurrentVersion\Uninstall\${RUNTIME_VERSION}"
!define COMMON_REGKEY "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
;-----------------------------------------------------------------------------------------------------------------------
;##### MUI 1.67 compatible
;-----------------------------------------------------------------------------------------------------------------------
!include "MUI.nsh"
!include "sections.nsh"
!include "Library.nsh"
!include "MUI2.nsh"
!include "OLEDB.NSH"
!include "LogicLib.nsh"
!include "WordFunc.nsh"

;-----------------------------------------------------------------------------------------------------------------------
;##### MUI Settings
;-----------------------------------------------------------------------------------------------------------------------
!define MUI_ABORTWARNING
!define MUI_ICON ".\icon\install.ico"  ;설치아이콘
!define MUI_UNICON ".\icon\uninstall.ico" ;삭제아이콘

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 환영 메세지
;-----------------------------------------------------------------------------------------------------------------------
!define MUI_WELCOMEFINISHPAGE_BITMAP ".\images\welcome.bmp" ;환영 페이지의 배경(190*290)
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH ;환영 페이지의 배경을 늘리지 않음
!define MUI_WELCOMEPAGE_TITLE "새로운 디자인과 기능으로 업그레이드된\r\n블럭노리 설치를 시작합니다."
!define MUI_WELCOMEPAGE_TEXT "아래 [다음] 버튼을 누르시면 설치가 시작됩니다."


;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 헤더 메세지
;-----------------------------------------------------------------------------------------------------------------------
;!define MUI_HEADERIMAGE
;!define MUI_HEADERIMAGE_BITMAP ".\head.bmp" ; 헤드이미지(150*57)
;!define MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_PAGE_HEADER_TEXT " 블럭노리 사용자 이용약관"
!define MUI_PAGE_HEADER_SUBTEXT "- 블럭노리을 설치하시기 전에 사용자 이용약관 내용을 살펴보시기 바랍니다."

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 약관 메세지
;-----------------------------------------------------------------------------------------------------------------------
!define MUI_LICENSEPAGE_TEXT_TOP "블럭노리 사용자 이용약관 동의 사항의 나머지 부분을 보시려면 [Page Down] 키를 눌러주세요." ;
!define MUI_LICENSEPAGE_TEXT_BOTTOM "내용에 동의하셨다면 '동의함'을 눌러주세요. 블럭노리을 설치하기 위해서는 반드시 내용에 동의하셔야 합니다."
!define MUI_TEXT_COMPONENTS_TITLE " 블럭노리 설치 구성 요소 선택"
!define MUI_TEXT_COMPONENTS_SUBTITLE "- 설치하고자 하는 블럭노리을의 구성 요소를 선택해 주세요."
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE " "
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO " "
!define MUI_TEXT_INSTALLING_TITLE " 블럭노리 설치중"
!define MUI_TEXT_INSTALLING_SUBTITLE "- 블럭노리을 설치하는 동안 잠시 기다려 주세요."

;-----------------------------------------------------------------------------------------------------------------------
;##### Instfiles page
;-----------------------------------------------------------------------------------------------------------------------
!insertmacro MUI_PAGE_WELCOME ;환영 페이지
!insertmacro MUI_PAGE_LICENSE ".\license\License.rtf" ;라이센스 페이지
!insertmacro MUI_PAGE_COMPONENTS
;Page components
!insertmacro MUI_PAGE_INSTFILES

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 완료후 보여질 페이지
;-----------------------------------------------------------------------------------------------------------------------
!define MUI_FINISHPAGE_RUN "$INSTDIR\${APP_EXENAME}"
!define MUI_FINISHPAGE_TITLE "블럭노리 설치 완료."
!define MUI_FINISHPAGE_TEXT "블럭노리을 설치해주셔서 감사합니다."
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 언어
;-----------------------------------------------------------------------------------------------------------------------
!insertmacro MUI_LANGUAGE "Korean"

;-----------------------------------------------------------------------------------------------------------------------
;##### 관리자 권한 획득
;-----------------------------------------------------------------------------------------------------------------------
RequestExecutionLevel admin

;-----------------------------------------------------------------------------------------------------------------------
;##### 제품명, 실행파일 생성위치, 인스톨 위치 지정
;-----------------------------------------------------------------------------------------------------------------------
Name "${PRODUCT_NAME}"
OutFile "..\Setup\$제품명_Setup.exe"
InstallDir "$LOCALAPPDATA\${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "passdir"
ShowInstDetails show
ShowUnInstDetails show

;-----------------------------------------------------------------------------------------------------------------------
;##### 전역 변수 선언
;-----------------------------------------------------------------------------------------------------------------------
Var VER
var MACAddress

;-----------------------------------------------------------------------------------------------------------------------
;##### 설치 프로그램이 나타나기 전에 수행할 함수
;-----------------------------------------------------------------------------------------------------------------------
Function .onInit
  #인터넷 연결 유무 체크
  Pop $1
  System::Call 'wininet.dll::InternetGetConnectedState(*i .r0, i 0) i.r1'
  StrCmp "$1" "1" inetA
  StrCmp "$1" "0" inetB
  goto chkend

  inetA:
  
    Pop $6
    ReadRegStr "$6" HKLM "${PRODUCT_UNINST_RUNTIME}" "VersionMajor" ; Adobe Air 버전 비교
    StrCmp "$6" "2" skipA skipB
    goto tend

    ;-----------------------------------------------------------------------------------------------------------------------
    ;##### 인터넷을 통하여 런타임 다운로드 후 설치함
    ;-----------------------------------------------------------------------------------------------------------------------
    skipA:
      goto tend
    skipB:
      MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "프로그램 설치를 위해서 Adobe Air v2.0 이상이 반드시 설치되어야만 합니다.$\n$\nAdobe Air를 설치하시겠습니까?" IDYES +3
      MessageBox MB_ICONQUESTION|MB_DEFBUTTON1 "설치가 종료되었습니다."
      Abort
      SetOutPath "$INSTDIR"
      InetLoad::load /POPUP "Adobe Air 다운로드중" "http://airdownload.adobe.com/air/win/download/latest/AdobeAIRInstaller.exe" "AdobeAIRInstaller.exe"
      Pop $0 # return value = exit code, "OK" if OK
      StrCmp "$0" "OK" setupA
      MessageBox MB_OK|MB_ICONEXCLAMATION "Adobe Air다운로드에 실패했습니다. 설치를 중단합니다." /SD IDOK
      Abort
      setupA:
        ExecWait "$INSTDIR\AdobeAIRInstaller.exe"
        Delete "$INSTDIR\AdobeAIRInstaller.exe"
       
        SetAutoClose true

        RMDir /r "$INSTDIR"

      goto tend
    tend:
      Push $6

    ReadRegStr "$6" HKLM "${PRODUCT_UNINST_RUNTIME}" "DisplayName" ; 기존버전 설치유뮤 확인
    StrCmp "$6" "${RUNTIME_VERSION}" skipC
    StrCmp "$6" "" skipD
    goto send

    skipC:
        Pop $5
        ## 기존 버전이 있는지 확인
        ReadRegStr "$5" HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion"
        StrCmp "$5" "${PRODUCT_VERSION}" initA
        StrCmp "$5" "" "0" initB
        StrCpy "$VER" "0"
        Goto send

        initA:
          MessageBox MB_ICONQUESTION|MB_DEFBUTTON1 "$(^Name) 가(이) 이미 설치되었습니다.$\n$\n설치가 종료됩니다."
          Abort
          Goto end
        initB:
          StrCpy "$VER" "1"
          Goto end
        end:
          Push $5
          Push $VER
         
        goto send
    skipD:
      MessageBox MB_ICONQUESTION|MB_DEFBUTTON1 "프로그램 설치를 위해서 Adobe Air가 반드시 설치되어야만 합니다.$\n$\nAdobe Air를 설치 후 다시 시도해주세요.$\n$\n설치가 종료됩니다."
      Abort
     goto send
    send:
     Push $6
     goto chkend

  inetB:
    MessageBox MB_ICONQUESTION|MB_DEFBUTTON1 "인터넷이 연결되어 있지 않습니다..$\n$\n인터넷 연결 후 다시 시도해주세요.$\n$\n설치가 종료됩니다."
    Abort
    goto chkend
  chkend:
    Push $1

FunctionEnd

;설치실패시
Function .onInstFailed
  ;-----------------------------------------------------------------------------------------------------------------------
  ;##### 실행중인 프로그램이 있으면 강제 종료
  ;-----------------------------------------------------------------------------------------------------------------------
  FindProcDLL::FindProc "${APP_EXENAME}"
  StrCmp $R0 1 mfound notmfound

  mfound:
    KillProcDLL::KillProc "${APP_EXENAME}"
  notmfound:


  Delete "$INSTDIR\*.*"
  RMDir /r "$INSTDIR"
 
  ~ ~ ~ ~ ~ ~ ~

  SetAutoClose true
FunctionEnd

;-----------------------------------------------------------------------------------------------------------------------
;##### 파일 복사 및 레지스트리 등록, 아이콘 생성
;-----------------------------------------------------------------------------------------------------------------------
Section "블럭노리 설치" SEC01
  ;-----------------------------------------------------------------------------------------------------------------------
  ;##### 실행중인 프로그램이 있으면 강제 종료
  ;-----------------------------------------------------------------------------------------------------------------------
  FindProcDLL::FindProc "${APP_EXENAME}"
  StrCmp $R0 1 mfound notmfound

  mfound:
    KillProcDLL::KillProc "${APP_EXENAME}"
  notmfound:

 
  SectionIn RO ; 필수설치표시
 
  ;-----------------------------------------------------------------------------------------------------------------------
  ;##### 파일 복사
  ;-----------------------------------------------------------------------------------------------------------------------
  SetOutPath "$INSTDIR"
  File "..\source\*.*"

~ ~ ~ ~ ~ ~ ~
  ndllfound:
 
  ;-----------------------------------------------------------------------------------------------------------------------
  ;##### 설치후 실행파일 실행
  ;-----------------------------------------------------------------------------------------------------------------------
;  Exec "$INSTDIR\${APP_EXENAME}"
  SetAutoClose true
SectionEnd

; Optional section (can be disabled by the user)
;Section "컴퓨터 시작시 자동실행"
;  CreateShortCut "$SMSTARTUP\${PRODUCT_NAME}.lnk" "$INSTDIR\${APP_EXENAME}" "unvisible" "$INSTDIR\${APP_EXENAME}" 0
;  WriteRegStr HKCU  "Software\Microsoft\Windows\CurrentVersion\Run" "${APP_AUTORUN_REGNAME}" '$INSTDIR\${APP_EXENAME} unvisible'
;SectionEnd

Section "바탕화면 아이콘 생성"
;  SetShellVarContext all
  SetOutPath "$INSTDIR"
  CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${APP_EXENAME}" "" "$INSTDIR\${APP_EXENAME}" 0
SectionEnd

Section -AdditionalIcons
;  SetShellVarContext all
  SetOutPath "$INSTDIR"
  CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
  CreateShortCut "$STARTMENU\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${APP_EXENAME}"
  CreateShortCut "$STARTMENU\${PRODUCT_NAME}\${PRODUCT_NAME} 삭제.lnk" "$INSTDIR\uninst.exe"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${APP_EXENAME}"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME} 삭제.lnk" "$INSTDIR\uninst.exe"
  CreateShortCut "$SMSTARTUP\${PRODUCT_NAME}.lnk" "$INSTDIR\${APP_EXENAME}" "unvisible" "$INSTDIR\${APP_EXENAME}" 0
  WriteUninstaller "$INSTDIR\uninst.exe"
SectionEnd

Section -Post

;  SetShellVarContext all
  SetOutPath "$INSTDIR"
  WriteRegStr HKCU  "Software\Microsoft\Windows\CurrentVersion\Run" "${PRODUCT_NAME}" '$INSTDIR\${APP_EXENAME} unvisible'
 
  WriteRegStr HKCU "${PRODUCT_PASSDIR_REGKEY}" "DisplayIcon" "$INSTDIR\${APP_EXENAME}"
 
   ~ ~ ~ ~ ~ ~ ~
SectionEnd

Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "${PRODUCT_NAME}을 삭제하시겠습니까?" IDYES +2
  Abort
FunctionEnd

Section Uninstall
  FindProcDLL::FindProc "${APP_EXENAME}"
  StrCmp $R0 1 mfound notmfound

  mfound:
    KillProcDLL::KillProc "${APP_EXENAME}"
  notmfound:

  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"

   ~ ~ ~ ~ ~ ~ ~

  Delete "$INSTDIR\*.*"
  RMDir /r "$INSTDIR"
 
  Delete "$STARTMENU\${PRODUCT_NAME}.lnk"

  RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"

  DeleteRegKey HKCU "${PRODUCT_PASSDIR_REGKEY}"
  DeleteRegValue HKCU  "Software\Microsoft\Windows\CurrentVersion\Run" "${PRODUCT_NAME}"
 
  DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"

  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  DeleteRegKey HKLM "SOFTWARE\Microsoft\Tracing\${PRODUCT_NAME}_RASAPI32"
  DeleteRegKey HKLM "SOFTWARE\Microsoft\Tracing\${PRODUCT_NAME}_RASMANCS"

  SetShellVarContext all
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\*.*"

 
  SetAutoClose true
SectionEnd

 

'개발팁( NSIS)' 카테고리의 다른 글

NSIS에서 MS-SQL 연결하여 데이타 입력하기  (0) 2013.07.24
top