NSIS - 설치프로그램 만들기
출처 http://zelon.springnote.com/pages/3459333
== about nsis ==
설치 프로그램은 사용자가 프로그램을 실행시킬 때 처음으로 접하는 것이다. 소프트웨어 설치가 느리거나 잘 설치되지 않는 것은 컴퓨터를 할 때 가장 짜증나는 것들이다.
[[BR]]
NSIS (Nullsoft Scriptable Install System) 은 프로그래머가 윈도우용 설치 프로그램들을 만들 수 있게 해주는 도구이다. NSIS 는 오픈 소스 라이센스이며, 어떤 사용에도 자유롭다.(또한 무료이다)
[[BR]]
NSIS 는 설치, 설치제거, 시스템 설정, 파일 추출 등을 하는 설치 프로그램들을 만든다. NSIS 는 스크립트 파일을 기본으로 하기 때문에 프로그래머는 설치 프로그램의 모든 부분을 제어할 수 있다. 스크립트 언어는 일반적인 프로그래밍 언어처럼 변수, 함수, 문자열 처리등을 지원한다. 이런 모든 특정을 포함하고도 NSIS 는 가장 작은 설치 프로그램이다. 기본 설정값을 이용하면 단지, 34KB 의 추가적인 용량이 든다.
== 처음 시작하기 ==
nsis 는 설치 '''스크립트''' 이다. 그러므로 일종의 프로그래밍 언어와 같은 문법을 사용해서 일련의 명령을 적어줘야 한다. 처음 시작할 때 이런 방식은 상당히 어렵게 느껴진다. 그래서 이런 불편을 없애기 위해 다양한 보조 프로그램들이 존재한다. 이런 보조 프로그램들은 GUI 와 같은 화면을 통해서 nsis 스크립트를 자동으로 생성해준다. 예를 들어 설치할 파일들을 선택해주고, 라이센스 파일을 선택해주고, 아이콘을 선택해주면 이와 같은 동작을 하는 nsis 파일을 자동으로 만들어주고, 이 nsis 파일을 컴파일해서(탐색기에서 nsis 파일에 오른쪽 버튼을 누르면 컴파일하는 명령이 보인다) 컴파일된 exe 파일을 배포하면 되는 것이다.
추후 수정 사항이 있을 때는 nsis 를 조금씩 변경해가면서 공부해보는 것이 제일 좋을 것이다.
이런 보조 프로그램으로는 HM NSIS Editor (http://hmne.sourceforge.net/) 를 추천한다. 사용방법도 꽤 쉽다.
== 공식 사이트 ==
* http://nsis.sourceforge.net/
== 유용한 링크 ==
* http://www.cipher.pe.kr/tt/cipher/category/6 - 정말 설명 잘 되어 있음. 게다가 한글!
* http://www.kipple.pe.kr/doc/nsis/
* http://www.fredshack.com/docs/nsis.html : 꽤 잘 설명되어 있음(영어)
== 유틸리티 프로그램 ==
* http://hmne.sourceforge.net/ - HM NSIS Editor 꽤 좋음. 위자드 형식으로 만들어줌.
* http://www.paehl.com/open_source/?GUI_Converter_and_EDITOR_for_NSIS - 간단히 만드는 다이얼로그
* http://eclipsensis.sourceforge.net - eclipse 의 플러그인
== 기타 사용법 ==
=== 실행 중인 프로세스가 있는가 ===
* FindProc 을 이용한다.
* http://nsis.sourceforge.net/archive/download.php 에서 FindProc 관련 파일을 받아, NSIS 설치 디렉토리 밑의 plugins 디렉토리에 해당 dll 을 넣은 후 다음과 같은 구문을 이용한다.
{{{
FindProcDLL::FindProc "explorer.exe"
StrCmp $R0 1 found notfound
found:
; explorer.exe is found
notfound:
; explorer.exe is not found
}}}
* 보다 자세한 사항은 압축을 풀면 나오는 첨부 파일을 참조한다.
=== 프로세스 죽이기 ===
* KillProcDLL 을 이용한다.
* http://nsis.sourceforge.net/archive/download.php 에서 KillProc 관련 파일을 받아, NSIS 설치 디렉토리 밑의 plugins 디렉토리에 해당 dll 을 넣은 후 다음과 같은 구문을 이용한다.
{{{
KillProcDLL::KillProc "explorer.exe"
}}}
* 보다 자세한 사항은 압축을 풀면 나오는 첨부 파일을 참조한다.
=== dll 버젼이 다를 때만 업그레이드 ===
* http://nsis.sourceforge.net/UpgradeDLL_Func_function
* 실제로 쓸 때는 다음과 같은 형식으로 쓴다.
{{{
!include UpgradeDLL.nsh
;....
;....
; 첫번째 인자는 현재 로컬의 dll 파일, 두번째는 설치될 위치의 파일
!insertmacro UpgradeDLL "ZViewerAgent.dll" "$SYSDIR\ZViewerAgent.dll" "$SYSDIR"
}}}
주의할 점이 있다면 UpgradeDLL 은 이미 존재하는 파일에 대해서만 덮어쓰고 만약 존재하지 않다면 아무런 작업도 하지 않게 된다. 그러므로 IfFileExists 명령을 통해 검사를 해서 없을 경우에는 UpgradeDLL 을 하지 않고 직접 복사해야한다.
내가 설정한 설치 스크립트
참고 :
프로세스를 죽이는 명령을 할때는 KillProcDLL.dll을 NSIS설치 프로그램 plogin안에 넣어줘야 에러없이 설치가 가능하다.
맨마지막으로 설치후 프로그램을 실행하기 위해서는 !insertmacro MUI_PAGE_FINISH을 꼭 삽입해야 실행할수있는 메세지가 나온다. 음 왜그럴까 ~~
; Install.nsi
;
;
;--------------------------------
;--------------------------------
; Note : Language List
; Korean
; English
; French
; German
; Spanish
; SpanishInternational
; SimpChinese
; TradChinese
; Japanese
; Italian
; Dutch
; Swedish
; Norwegian
; NorwegianNynorsk
; Finnish
; Greek
; Russian
; Portuguese
; PortugueseBR
; Polish
; Ukrainian
; Czech
; Slovak
; Croatian
; Bulgarian
; Hungarian
; Thai
; Romanian
; Latvian
; Macedonian
; Estonian
; Turkish
; Lithuanian
; Slovenian
; Serbian
; SerbianLatin
; Arabic
; Farsi
; Hebrew
; Indonesian
; Mongolian
; Luxembourgish
; Albanian
; Breton
; Belarusian
; Icelandic
; Malay
; Bosnian
; Kurdish
; Irish
; Uzbek
; Galician
; Afrikaans
;--------------------------------
; Include
!include "MUI2.nsh"
;--------------------------------
!define MUI_ABORTWARNING
!define MUI_HEADERIMAGE
;--------------------------------
!define _VERSION "1.0.0.1"
VIProductVersion "${_VERSION}"
VIAddVersionKey "ProductName" "SimpleFTP"
VIAddVersionKey "CompanyName" "Simplex Internet"
VIAddVersionKey "FileVersion" "${_VERSION}"
VIAddVersionKey "InternalName" "SimpleFTP"
VIAddVersionKey "FileDescription" "SimpleFTP"
VIAddVersionKey "LegalCopyright" "Simplex Internet Corporation. All rights reserved."
;--------------------------------
; Setting
;!define MUI_ICON "images\icon.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "images\main.bmp" ; recommended : 164x314 pixels
!define MUI_HEADERIMAGE_BITMAP "images\top.bmp" ; recommended : 150x57 pixels
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\SimpleFTP"
!define MUI_STARTMENUPAGE_REGISTRY_LANGUAGE "language"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!define STARTMENUPAGE_REGISTRY_ROOT HKCU
;경고 페이지 및 설치 종류 후 바로 실행할 파일지정
!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\SimpleFTP.exe" ; 자동 실행 프로그램
!define MUI_FINISHPAGE_RUN_TEXT "SimpleFTP를 실행합니다." ; 자동 실행 텍스트
!define LICENCE_TEXT "License_KOR.txt"
!define REGISTER_PATH "Software\SimpleFTP" ; 레지스트리에 저장
!define INSTALL_LANGUAGE "Korean"
!define LANGUAGE_SELECT 0
;--------------------------------
; 시작 메뉴에 추가하려는 ShortCut List
!macro APPLICATION_SHORTCUT
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\SimpleFTP.lnk" "$INSTDIR\bin\SimpleFTP.exe"
!macroend
;--------------------------------
Name "SimpleFTP"
OutFile "SimpleFTP_Installer.exe"
InstallDir $PROGRAMFILES\SimpleFTP
SetFont "돋움" 9
; 설정은 여기까지.......
;--------------------------------
;InstallDirRegKey ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} ""
;--------------------------------
;Variables
Var StartMenuFolder
Var InstallLanguage
;--------------------------------
;--------------------------------
; Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE ${LICENCE_TEXT}
;!insertmacro MUI_PAGE_DIRECTORY ; 설치디렉토리를 디폴트로 할경우 주석처리한다.
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Korean"
XPStyle on
RequestExecutionLevel admin
Function .onInit
;Language selection dialog
Push ""
Push ${LANG_ENGLISH}
Push English
Push ${LANG_KOREAN}
Push Korean
Push A ; A means auto count languages
; for the auto count to work the first empty push (Push "") must remain
LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
Pop $LANGUAGE
StrCmp $LANGUAGE "cancel" 0 +2
Abort
;InstallLanguage $LANGUAGE
FunctionEnd
;Section names set by Language strings
;It works with ! too
Section !$(Sec1Name) sec1
;MessageBox MB_OK $(Message)
SectionEnd
; The old, slow, wasteful way
; Look at this section and see why LangString is so much easier
Section "Section number two"
StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +1
;LANGUAGE_SELECT 0
StrCmp $LANGUAGE ${LANG_KOREAN} 0 +2
;LANGUAGE_SELECT 1
SectionEnd
;--------------------------------
;--------------------------------
; Section
Section "Install"
; Set output path to the installation directory.
KillProcDLL::KillProc "SimpleFTP.exe"
SetOutPath $INSTDIR
;Delete "$INSTDIR\*.*"
; 서브폴터를 탐색하면서 지운다
IfFileExists "$INSTDIR\*.*" lableFileExist labelDeleteAll
lableFileExist:
FindFirst $0 $1 $INSTDIR\*.*
labelLoop:
FindNext $0 $1
StrCmp $1 "." labelLoop
StrCmp $1 ".." labelLoop
StrCmp $1 "" labelDeleteAll
RMDir /r "$INSTDIR\$1"
Goto labelLoop
labelDeleteAll:
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
RMDir "$SMPROGRAMS\$StartMenuFolder"
;DeleteRegKey /ifempty ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH}
;바탕화면으로 바로가기 등록
CreateShortCut "$DESKTOP\SimpleFTP.lnk" "$INSTDIR\bin\SimpleFTP.exe"
;Store installation folder
;WriteRegStr ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "" $INSTDIR
;StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +1
;WriteRegDWORD ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "language" 1
;StrCmp $LANGUAGE ${LANG_KOREAN} 0 +2
;WriteRegDWORD ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "language" 0
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro APPLICATION_SHORTCUT
!insertmacro MUI_STARTMENU_WRITE_END
; Put file there
File /r Install\*.*
;RegDLL "$INSTDIR\bin\Flash10b.ocx"
;RegDLL "$INSTDIR\bin\ActiveXControl.dll"
;RegDLL "$INSTDIR\bin\MessengerAdminOper.dll"
SectionEnd ; end the section
Section "Uninstall"
Delete "$INSTDIR\*.*"
; 서브폴터를 탐색하면서 지운다
IfFileExists "$INSTDIR\*.*" lableFileExist labelDeleteAll
lableFileExist:
FindFirst $0 $1 $INSTDIR\*.*
labelLoop:
FindNext $0 $1
StrCmp $1 "." labelLoop
StrCmp $1 ".." labelLoop
StrCmp $1 "" labelDeleteAll
RMDir /r "$INSTDIR\$1"
Goto labelLoop
labelDeleteAll:
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
RMDir "$SMPROGRAMS\$StartMenuFolder"
;DeleteRegKey /ifempty ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH}
SectionEnd
== about nsis ==
설치 프로그램은 사용자가 프로그램을 실행시킬 때 처음으로 접하는 것이다. 소프트웨어 설치가 느리거나 잘 설치되지 않는 것은 컴퓨터를 할 때 가장 짜증나는 것들이다.
[[BR]]
NSIS (Nullsoft Scriptable Install System) 은 프로그래머가 윈도우용 설치 프로그램들을 만들 수 있게 해주는 도구이다. NSIS 는 오픈 소스 라이센스이며, 어떤 사용에도 자유롭다.(또한 무료이다)
[[BR]]
NSIS 는 설치, 설치제거, 시스템 설정, 파일 추출 등을 하는 설치 프로그램들을 만든다. NSIS 는 스크립트 파일을 기본으로 하기 때문에 프로그래머는 설치 프로그램의 모든 부분을 제어할 수 있다. 스크립트 언어는 일반적인 프로그래밍 언어처럼 변수, 함수, 문자열 처리등을 지원한다. 이런 모든 특정을 포함하고도 NSIS 는 가장 작은 설치 프로그램이다. 기본 설정값을 이용하면 단지, 34KB 의 추가적인 용량이 든다.
== 처음 시작하기 ==
nsis 는 설치 '''스크립트''' 이다. 그러므로 일종의 프로그래밍 언어와 같은 문법을 사용해서 일련의 명령을 적어줘야 한다. 처음 시작할 때 이런 방식은 상당히 어렵게 느껴진다. 그래서 이런 불편을 없애기 위해 다양한 보조 프로그램들이 존재한다. 이런 보조 프로그램들은 GUI 와 같은 화면을 통해서 nsis 스크립트를 자동으로 생성해준다. 예를 들어 설치할 파일들을 선택해주고, 라이센스 파일을 선택해주고, 아이콘을 선택해주면 이와 같은 동작을 하는 nsis 파일을 자동으로 만들어주고, 이 nsis 파일을 컴파일해서(탐색기에서 nsis 파일에 오른쪽 버튼을 누르면 컴파일하는 명령이 보인다) 컴파일된 exe 파일을 배포하면 되는 것이다.
추후 수정 사항이 있을 때는 nsis 를 조금씩 변경해가면서 공부해보는 것이 제일 좋을 것이다.
이런 보조 프로그램으로는 HM NSIS Editor (http://hmne.sourceforge.net/) 를 추천한다. 사용방법도 꽤 쉽다.
== 공식 사이트 ==
* http://nsis.sourceforge.net/
== 유용한 링크 ==
* http://www.cipher.pe.kr/tt/cipher/category/6 - 정말 설명 잘 되어 있음. 게다가 한글!
* http://www.kipple.pe.kr/doc/nsis/
* http://www.fredshack.com/docs/nsis.html : 꽤 잘 설명되어 있음(영어)
== 유틸리티 프로그램 ==
* http://hmne.sourceforge.net/ - HM NSIS Editor 꽤 좋음. 위자드 형식으로 만들어줌.
* http://www.paehl.com/open_source/?GUI_Converter_and_EDITOR_for_NSIS - 간단히 만드는 다이얼로그
* http://eclipsensis.sourceforge.net - eclipse 의 플러그인
== 기타 사용법 ==
=== 실행 중인 프로세스가 있는가 ===
* FindProc 을 이용한다.
* http://nsis.sourceforge.net/archive/download.php 에서 FindProc 관련 파일을 받아, NSIS 설치 디렉토리 밑의 plugins 디렉토리에 해당 dll 을 넣은 후 다음과 같은 구문을 이용한다.
{{{
FindProcDLL::FindProc "explorer.exe"
StrCmp $R0 1 found notfound
found:
; explorer.exe is found
notfound:
; explorer.exe is not found
}}}
* 보다 자세한 사항은 압축을 풀면 나오는 첨부 파일을 참조한다.
=== 프로세스 죽이기 ===
* KillProcDLL 을 이용한다.
* http://nsis.sourceforge.net/archive/download.php 에서 KillProc 관련 파일을 받아, NSIS 설치 디렉토리 밑의 plugins 디렉토리에 해당 dll 을 넣은 후 다음과 같은 구문을 이용한다.
{{{
KillProcDLL::KillProc "explorer.exe"
}}}
* 보다 자세한 사항은 압축을 풀면 나오는 첨부 파일을 참조한다.
=== dll 버젼이 다를 때만 업그레이드 ===
* http://nsis.sourceforge.net/UpgradeDLL_Func_function
* 실제로 쓸 때는 다음과 같은 형식으로 쓴다.
{{{
!include UpgradeDLL.nsh
;....
;....
; 첫번째 인자는 현재 로컬의 dll 파일, 두번째는 설치될 위치의 파일
!insertmacro UpgradeDLL "ZViewerAgent.dll" "$SYSDIR\ZViewerAgent.dll" "$SYSDIR"
}}}
주의할 점이 있다면 UpgradeDLL 은 이미 존재하는 파일에 대해서만 덮어쓰고 만약 존재하지 않다면 아무런 작업도 하지 않게 된다. 그러므로 IfFileExists 명령을 통해 검사를 해서 없을 경우에는 UpgradeDLL 을 하지 않고 직접 복사해야한다.
내가 설정한 설치 스크립트
참고 :
프로세스를 죽이는 명령을 할때는 KillProcDLL.dll을 NSIS설치 프로그램 plogin안에 넣어줘야 에러없이 설치가 가능하다.
맨마지막으로 설치후 프로그램을 실행하기 위해서는 !insertmacro MUI_PAGE_FINISH을 꼭 삽입해야 실행할수있는 메세지가 나온다. 음 왜그럴까 ~~
; Install.nsi
;
;
;--------------------------------
;--------------------------------
; Note : Language List
; Korean
; English
; French
; German
; Spanish
; SpanishInternational
; SimpChinese
; TradChinese
; Japanese
; Italian
; Dutch
; Swedish
; Norwegian
; NorwegianNynorsk
; Finnish
; Greek
; Russian
; Portuguese
; PortugueseBR
; Polish
; Ukrainian
; Czech
; Slovak
; Croatian
; Bulgarian
; Hungarian
; Thai
; Romanian
; Latvian
; Macedonian
; Estonian
; Turkish
; Lithuanian
; Slovenian
; Serbian
; SerbianLatin
; Arabic
; Farsi
; Hebrew
; Indonesian
; Mongolian
; Luxembourgish
; Albanian
; Breton
; Belarusian
; Icelandic
; Malay
; Bosnian
; Kurdish
; Irish
; Uzbek
; Galician
; Afrikaans
;--------------------------------
; Include
!include "MUI2.nsh"
;--------------------------------
!define MUI_ABORTWARNING
!define MUI_HEADERIMAGE
;--------------------------------
!define _VERSION "1.0.0.1"
VIProductVersion "${_VERSION}"
VIAddVersionKey "ProductName" "SimpleFTP"
VIAddVersionKey "CompanyName" "Simplex Internet"
VIAddVersionKey "FileVersion" "${_VERSION}"
VIAddVersionKey "InternalName" "SimpleFTP"
VIAddVersionKey "FileDescription" "SimpleFTP"
VIAddVersionKey "LegalCopyright" "Simplex Internet Corporation. All rights reserved."
;--------------------------------
; Setting
;!define MUI_ICON "images\icon.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "images\main.bmp" ; recommended : 164x314 pixels
!define MUI_HEADERIMAGE_BITMAP "images\top.bmp" ; recommended : 150x57 pixels
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\SimpleFTP"
!define MUI_STARTMENUPAGE_REGISTRY_LANGUAGE "language"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!define STARTMENUPAGE_REGISTRY_ROOT HKCU
;경고 페이지 및 설치 종류 후 바로 실행할 파일지정
!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\SimpleFTP.exe" ; 자동 실행 프로그램
!define MUI_FINISHPAGE_RUN_TEXT "SimpleFTP를 실행합니다." ; 자동 실행 텍스트
!define LICENCE_TEXT "License_KOR.txt"
!define REGISTER_PATH "Software\SimpleFTP" ; 레지스트리에 저장
!define INSTALL_LANGUAGE "Korean"
!define LANGUAGE_SELECT 0
;--------------------------------
; 시작 메뉴에 추가하려는 ShortCut List
!macro APPLICATION_SHORTCUT
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\SimpleFTP.lnk" "$INSTDIR\bin\SimpleFTP.exe"
!macroend
;--------------------------------
Name "SimpleFTP"
OutFile "SimpleFTP_Installer.exe"
InstallDir $PROGRAMFILES\SimpleFTP
SetFont "돋움" 9
; 설정은 여기까지.......
;--------------------------------
;InstallDirRegKey ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} ""
;--------------------------------
;Variables
Var StartMenuFolder
Var InstallLanguage
;--------------------------------
;--------------------------------
; Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE ${LICENCE_TEXT}
;!insertmacro MUI_PAGE_DIRECTORY ; 설치디렉토리를 디폴트로 할경우 주석처리한다.
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Korean"
XPStyle on
RequestExecutionLevel admin
Function .onInit
;Language selection dialog
Push ""
Push ${LANG_ENGLISH}
Push English
Push ${LANG_KOREAN}
Push Korean
Push A ; A means auto count languages
; for the auto count to work the first empty push (Push "") must remain
LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
Pop $LANGUAGE
StrCmp $LANGUAGE "cancel" 0 +2
Abort
;InstallLanguage $LANGUAGE
FunctionEnd
;Section names set by Language strings
;It works with ! too
Section !$(Sec1Name) sec1
;MessageBox MB_OK $(Message)
SectionEnd
; The old, slow, wasteful way
; Look at this section and see why LangString is so much easier
Section "Section number two"
StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +1
;LANGUAGE_SELECT 0
StrCmp $LANGUAGE ${LANG_KOREAN} 0 +2
;LANGUAGE_SELECT 1
SectionEnd
;--------------------------------
;--------------------------------
; Section
Section "Install"
; Set output path to the installation directory.
KillProcDLL::KillProc "SimpleFTP.exe"
SetOutPath $INSTDIR
;Delete "$INSTDIR\*.*"
; 서브폴터를 탐색하면서 지운다
IfFileExists "$INSTDIR\*.*" lableFileExist labelDeleteAll
lableFileExist:
FindFirst $0 $1 $INSTDIR\*.*
labelLoop:
FindNext $0 $1
StrCmp $1 "." labelLoop
StrCmp $1 ".." labelLoop
StrCmp $1 "" labelDeleteAll
RMDir /r "$INSTDIR\$1"
Goto labelLoop
labelDeleteAll:
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
RMDir "$SMPROGRAMS\$StartMenuFolder"
;DeleteRegKey /ifempty ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH}
;바탕화면으로 바로가기 등록
CreateShortCut "$DESKTOP\SimpleFTP.lnk" "$INSTDIR\bin\SimpleFTP.exe"
;Store installation folder
;WriteRegStr ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "" $INSTDIR
;StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +1
;WriteRegDWORD ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "language" 1
;StrCmp $LANGUAGE ${LANG_KOREAN} 0 +2
;WriteRegDWORD ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH} "language" 0
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro APPLICATION_SHORTCUT
!insertmacro MUI_STARTMENU_WRITE_END
; Put file there
File /r Install\*.*
;RegDLL "$INSTDIR\bin\Flash10b.ocx"
;RegDLL "$INSTDIR\bin\ActiveXControl.dll"
;RegDLL "$INSTDIR\bin\MessengerAdminOper.dll"
SectionEnd ; end the section
Section "Uninstall"
Delete "$INSTDIR\*.*"
; 서브폴터를 탐색하면서 지운다
IfFileExists "$INSTDIR\*.*" lableFileExist labelDeleteAll
lableFileExist:
FindFirst $0 $1 $INSTDIR\*.*
labelLoop:
FindNext $0 $1
StrCmp $1 "." labelLoop
StrCmp $1 ".." labelLoop
StrCmp $1 "" labelDeleteAll
RMDir /r "$INSTDIR\$1"
Goto labelLoop
labelDeleteAll:
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
RMDir "$SMPROGRAMS\$StartMenuFolder"
;DeleteRegKey /ifempty ${STARTMENUPAGE_REGISTRY_ROOT} ${REGISTER_PATH}
SectionEnd
댓글
댓글 쓰기