NSIS/Reference

[NSIS] 32비트와 64비트 모듈 등록하는 법. (regsvr32)

MoongStory 2024. 12. 11. 16:07
반응형

- 등록

x86 환경에선 RegDLL "$SYSDIR\Test.ocx"처럼 RegDLL 뒤에 등록할 파일의 풀 경로를 입력해 주면 되고

x64 환경에선 ExecWait '"$SYSDIR\regsvr32.exe" /s "$SYSDIR\Text_x64.ocx"' 처럼 regsvr32.exe 프로그램을 통해 등록한다.

- 해제

x86 환경에서 UnRegDLL "$SYSDIR\Test.ocx"

x64 환경에선 ExecWait '"$SYSDIR\regsvr32.exe" /u /s "$SYSDIR\Test_x64.ocx"'

 

; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "제품 이름"
!define PRODUCT_VERSION "1.0.0.1"
!define PRODUCT_PUBLISHER "회사이름 Co., LTD."
!define PRODUCT_WEB_SITE "http://www.회사사이트.co.kr"
; "Software\Microsoft\Windows\CurrentVersion\App Paths" 경로의 레지스트리에 키 값을 추가하면
; "실행" 창에서 입력하여 바로 실행이 가능하다.
; 아래 처럼 추가가 된다면 "실행" 창에 "프로그램명.exe"를 입력하면 프로그램이 실행된다.
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\프로그램명.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "x64.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON ".\install.ico"
!define MUI_UNICON ".\install.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
; !insertmacro MUI_PAGE_LICENSE "..\..\..\..\path\to\licence\YourSoftwareLicence.txt"
; Directory page
; !insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!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}"
OutFile "설치파일명.exe"
InstallDir "$PROGRAMFILES\Moong\TestProgram"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
Section "MainSection" SEC01
	SetOutPath "$SYSDIR"
	SetOverwrite on
	File ".\TestProject\Test.ocx"
	RegDLL "$SYSDIR\Test.ocx" ; x86 환경에서 파일 레지 등록
	SetOutPath "$SYSDIR"
	SetOverwrite on
	${DisableX64FSRedirection} ; x64 환경에서 Syswow64 폴더가 아니라 System32 폴더에 넣고자 할 때.
		File ".\TestProject\Test_x64.ocx"
		ExecWait '"$SYSDIR\regsvr32.exe" /s "$SYSDIR\Text_x64.ocx"' ; x64 환경에서 파일 레지 등록
	${EnableX64FSRedirection}
SectionEnd
Section -Post
	WriteUninstaller "$SYSDIR\UnInstaller.exe"
	WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$WINDIR\SysWOW64\프로그램명.exe"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$SYSDIR\UnInstaller.exe"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$WINDIR\SysWOW64\프로그램명.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
	Delete "$SYSDIR\UnInstaller.exe"
	${DisableX64FSRedirection}
		ExecWait '"$SYSDIR\regsvr32.exe" /u /s "$SYSDIR\Test_x64.ocx"' ; x64 환경에서 파일 레지스트리 등록 해제
		Delete "$SYSDIR\Test_x64.ocx"
	${EnableX64FSRedirection}
	UnRegDLL "$SYSDIR\Test.ocx" ; x86 환경에서 파일 레지스트리 등록 해제
	Delete "$SYSDIR\Test.ocx"
	;RMDir "$WINDIR\SysWOW64"
	;RMDir "$WINDIR\System32"
	DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
	DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
	SetAutoClose true
SectionEnd
반응형