NSIS 222
http://trinity.snupaim.net/~neopaim/?document_srl=8332
많은 경우 마법사로도 충분하지만 좀더 구체적으로 설치 작업을 건드려야할 경우가 있습니다.
가령 설치시 레지스트리를 건드리고 나중에 이를 복구한다든가 하는 부분이지요. 이를 위해선 WriteRegStr 과 DeleteRegKey 를 이용합니다.
한 가지 더 예를 들자면, .ocx, .dll, .ax 같은 라이브러리 내지 컨트롤 파일들은 복사만 한다고 끝나는게 아니라 등록을 해주어야 동작하는데, 수동으로 등록하기 위한 명령어가 regsvr32 (파일이름) 이고 등록 취소하기 위한 명령어가 regsvr32 (파일이름) /u 입니다. NSIS에서 이를 수행하게 하려면 해당 명령어를 알아야 하는데, 여기에 해당하는 스크립트가 RegDLL (파일이름), UnRegDLL (파일이름) 입니다.
이를 바탕으로 제가 작성한 스크립트를 붙여넣습니다. ActiveX 컨트롤을 수동으로 설치하는 프로램인데, 단순히 스크립트 마법사가 생성해준 소스에 위 두가지를 덧붙인 것 뿐입니다.
우선 이 스크립트로 제가 하려고 했던 작업입니다.
설치 시,
0. 설치프로그램이 하는 일반적 작업 (Program Files에 폴더를 생성하고 설명서 및 Uninstaller 설치. 프로그램 그룹 생성) : 마법사가 해줌
1. c:\windows\system32에 ActiveX 컨트롤 동작에 필요한 파일 복사 : 마법사가 해줌
2. ActiveX 컨트롤을 해당 컴퓨터의 사용 가능 목록에 등록 : RegDLL
3. ActiveX 컨트롤이 안전하다는 것을 보장하기 위한 정보를 레지스트리에 등록 : WriteRegStr
삭제 시,
0. 설치 프로그램이 한 과정 역으로 수행 : 마법사가 해줌
1. system32에 설치했던 파일들 삭제 : 마법사가 해줌
2. ActiveX 컨트롤 등록 취소 : UnRegDLL
3.ActiveX 관련 내용을 레지스트리에서 전부 삭제
실제 스크립트입니다.
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Medical PhotoWeb Synchronizer"
!define PRODUCT_VERSION "0.1"
!define PRODUCT_PUBLISHER "PAIM"
!define PRODUCT_WEB_SITE "http://snupaim.net"
!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_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "C:\Documents and Settings\이호종\바탕 화면\라이센스 예시.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "Korean"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "MPWSync.exe"
InstallDir "$PROGRAMFILES\MPWSync"
ShowInstDetails show
ShowUnInstDetails show
Section "코어" SEC01
SetOutPath "$SYSDIR"
SetOverwrite ifnewer
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\VB6KO.DLL"
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\SABISUNGUploader.ocx"
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\MSWINSCK.OCX"
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\MSSTKPRP.DLL"
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\MSCOMCTL.OCX"
File "C:\Documents and Settings\이호종\바탕 화면\비둘기\멀티업다운로더 파일\COMDLG32.OCX"
SetOutPath "$INSTDIR"
File "C:\Documents and Settings\이호종\바탕 화면\readme.txt"
; dll, ocx, ax와 같이 레지스트리에 등록이 필요할 때 실행 : RegDLL <-> UnRegDLL
RegDLL "$SYSDIR\SABISUNGUploader.ocx"
; 레지스트리 기록 <-> DeleteRegKey
WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{723F094A-89E0-4822-ACA5-9BCBC1B6D206}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}" "@" ""
WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{723F094A-89E0-4822-ACA5-9BCBC1B6D206}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}" "@" ""
SectionEnd
Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateDirectory "$SMPROGRAMS\Medical PhotoWeb Synchronizer"
CreateShortCut "$SMPROGRAMS\Medical PhotoWeb Synchronizer\We are PAIM.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\Medical PhotoWeb Synchronizer\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}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
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
; dll, ocx, ax와 같이 레지스트리에 등록이 필요할 때 실행 : RegDLL <-> UnRegDLL
RegDLL "$SYSDIR\SABISUNGUploader.ocx"
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\readme.txt"
Delete "$SYSDIR\COMDLG32.OCX"
Delete "$SYSDIR\MSCOMCTL.OCX"
Delete "$SYSDIR\MSSTKPRP.DLL"
Delete "$SYSDIR\MSWINSCK.OCX"
Delete "$SYSDIR\SABISUNGUploader.ocx"
Delete "$SYSDIR\VB6KO.DLL"
Delete "$SMPROGRAMS\Medical PhotoWeb Synchronizer\Uninstall.lnk"
Delete "$SMPROGRAMS\Medical PhotoWeb Synchronizer\We are PAIM.lnk"
RMDir "$SMPROGRAMS\Medical PhotoWeb Synchronizer"
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{723F094A-89E0-4822-ACA5-9BCBC1B6D206}"
SetAutoClose true
SectionEnd