헬마입니다.

  며칠전에 방명록에 사용자 페이지에서 조건등을 검사하여 특정 조건이 아니면 다음 페이지로 넘어가지 않도록 하는 작업에 대해서 문의가 있었는데요. 답글을 달고 한동안 해야지 해야지 하다가 이제서야 올리게 되었습니다. ㅠㅠ

간단한 예제 스크립트입니다. 컴파일 후에 실행하시면, 사용자 페이지가 나타나고 입력상자 2개에 같은 비밀번호를 숫자 4자로 입력하지 않으면 다음 버튼을 눌러도 넘어가지 않도록 되어있습니다.




!define APPNAME 'NSIS Example' 
Name 'NSIS 예제 스크립트'

OutFile 'NSIS-Example.exe'

!include "MUI.nsh"
!include "LogicLib.nsh"
!include "nsDialogs.nsh"
!include 'WordFunc.nsh'


!insertmacro MUI_PAGE_WELCOME
Page custom ConfigPage CheckConfig '' 
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE 'Korean'

BrandingText 'NSIS 예제 스크립트'

!insertmacro StrFilter

Var hPassword_Text_1
Var hPassword_Confirm

Function ConfigPage
  !insertmacro MUI_HEADER_TEXT '${APPNAME} 설치' '환경 설정'
  
  nsDialogs::Create 1018
  Pop $0
  
  ${If} $0 == error
  	Abort
  ${EndIf}

	${NSD_CreateGroupBox} 50% 0 50% 80% "비밀번호 설정"
	Pop $1

		${NSD_CreateLabel} 61% 20u 30% 10% '개인 비밀번호를 입력하세요'
		Pop $2
  
  		${NSD_CreatePassword} 65% 40u 20% 10% ''
		Pop $hPassword_Text_1

		${NSD_CreateLabel} 60% 70u 33% 10% '한번 더 비밀번호를 입력하세요'
		Pop $3
		
		${NSD_CreatePassword} 65% 85u 20% 10% ''
		Pop $hPassword_Confirm

		${NSD_SetTextLimit} $hPassword_Text_1 4
		${NSD_SetTextLimit} $hPassword_Confirm 4
		${NSD_OnChange} $hPassword_Text_1 nsPageUse_EditNotify
		${NSD_OnChange} $hPassword_Confirm nsPageUse_EditNotify

	nsDialogs::Show
	
FunctionEnd

Function CheckConfig
	${NSD_GetText} $hPassword_Text_1 $0
	${NSD_GetText} $hPassword_COnfirm $1
	
	${If} $0 == ''
		${OrIf} $1 == ''
			MessageBox MB_OK '빈 비밀번호는 허용되지 않습니다.'
			Abort
	${EndIf}
	
	${If} $0 != $1
		MessageBox MB_OK '입력한 비밀번호가 서로 다릅니다\r\n비밀번호는 숫자 4자리로 정해주세요' 
		Abort
	${EndIf}
	
FunctionEnd

Function nsPageUse_EditNotify
	# 통지를 보낸 컨트롤을 스택에서 꺼냄
	Pop $R0 
	
	${NSD_GetText} $R0 $0

	# 문자열을 숫자 문자열로 변환해본 후 길이가 일치하는지 확인
	StrLen $1 $0 	
	${StrFilter} $0 '1' '' '' $2
	Strlen $3 $2
	${If} $1 <> $3
		MessageBox MB_OK '비밀번호는 숫자 4자리만 가능합니다.'
		
		IntOp $1 $1 - 1
		StrCpy $4 $0 $1
		${NSD_SetText} $R0 $4
	${EndIf}
	
FunctionEnd

Section -
SectionEnd
저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. 박정근 2010.03.09 10:47 신고 Address Modify/Delete Reply

    Error: resolving install function "Nsis2Io" in function "mui.WelcomePre_12.5.9"

    에러가 나는데 혹시 원인이 뭔지 알수 있을까요^^;?

    • 헬마 2010.03.09 13:13 신고 Address Modify/Delete

      제가 컴파일한 NSIS 는 2.46 버전입니다. 2.46 을 덮어서 설치해보시고 그래도 안되면 제가 쓰고있는 NSIS 를 압축해서 올려보겠습니다.

  2. BlogIcon 주전자 2010.03.12 09:34 신고 Address Modify/Delete Reply

    아아 nsDialogs를 쓰셨군요!
    감사합니다 +ㅅ+b

  3. 임현석 2010.04.10 14:30 신고 Address Modify/Delete Reply

    NSIS 플러그 인에는 무었이있고 어떡해 사용하는지 좀 알려주세요~~

    프로세스 종료 플러그 인이라던지...

  4. 질문이요 2011.01.11 10:00 신고 Address Modify/Delete Reply

    자신이 입력하기로 원하는 비밀번호는 어디에 설정해야해요?

  5. 2012.02.13 14:01 Address Modify/Delete Reply

    비밀댓글입니다

  6. 2013.09.14 18:28 Address Modify/Delete Reply

    비밀댓글입니다


헬마입니다.

댓글로 요청하신 분이 계셔서 최대한 간단하게 골격 코드 비슷한 분위기로 작성하여보았습니다.

ExperienceUI for NSIS 의 버전은 1.11pre 이상이면 컴파일에 문제가 없을겁니다.

nsi 파일과 같은 폴더에 eula.rtf 라는 라이센스 파일이 있어야합니다. 같은 이름으로 아무 파일이나 넣어주세요 ^^


; XPUI 를 사용하기위한 헤더파일 
!include XPUI.nsh

Name 'test for ExperienceUI'
OutFile testXPUI.exe
InstallDir $PROGRAMFILES\TestXPUI

; 사용할 설치관리자 페이지 추가
${Page} Welcome2
${LicensePage} eula.rtf
${Page} Directory
${Page} Components
${Page} InstConfirm
${Page} InstFiles
${Page} Finish

; 사용할 설치제거관리자 페이지 추가
${UnPage} Welcome2
${UnPage} InstConfirm
${UnPage} InstFiles
${UnPage} Finish

; 언어파일 추가
!insertmacro XPUI_LANGUAGE "Korean"

Section -preSetup
SectionEnd

Section test SecTest
SectionEnd

Section -postSetup
    WriteUninstaller $INSTDIR\uninstall.exe 
SectionEnd

; 섹션에 대한 설명글 추가
!insertmacro XPUI_FUNCTION_DESCRIPTION_BEGIN
    !insertmacro XPUI_DESCRIPTION_TEXT ${SecTest} '섹션설명'
!insertmacro XPUI_FUNCTION_DESCRIPTION_END



저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. BlogIcon grandterran 2009.12.13 15:26 신고 Address Modify/Delete Reply

    현재 ExperienceUI for NSIS 가 1.3.1 Final 버전이 최신이더군요...

    그런데 UI 테마만 인스톨쉴드처럼 만드는 방법이 아주 쉬운게 있더군요

    HM Nis Edit 2.0.3 으로 스크립트 마법사를 실행해 스크립트를 만든 다음

    아래와 같이

    ; MUI 1.67 compatible ------
    !include "XPUI.nsh"

    이부분의 !include "MUI.nsh"를 XPUI로 고쳐서

    ; MUI 1.67 compatible ------
    !include "XPUI.nsh"

    이렇게 편집해서 컴파일하면 아주 쉽게 UI가 적용 되더군요. ㅎㅎ


    ExperienceUI for NSIS 1.3.1를 설치 했는 가정하에 적용 됨.

  2. 물음표... 2011.08.25 20:43 신고 Address Modify/Delete Reply

    님아.. 참 염치없는 일이겠지만.. 7z 파일을 받아서

    압축을 푸는 예제좀 만들어서 주시면 않될까요? ㅠㅠ;; 아무리 찾아도 다운로드 받고나서

    압축푸는 강좌가 없었음... 너무 염치없는일이지만.. 좀 부탁드립니다.


헬마입니다.

정말 몇 개월만의 업데이트인지 모르겠네요.

몇개 개월만의 업뎃인데도 간단한 버그수정판입니다.

그동안 searchparse 명령의 버그때문에 개발버전으로 받아서 써야했는데 그 문제를 해결한 것이 제일 좋은점이네요.

또한, ExperienceUI for NSIS 가 1.11pre 에서 1.3.1로 업데이트 했습니다.

업데이트 중단인지 알았는데 찾아보니 몇개월전(!) 에 한번 업데이트를 했더군요.. 저것도 2년반만의 업데이트랍니다. ㄷㄷ

p.s : XPUI 1.3.1 설치에 관하여 약간의 잘못된 점이 있어서 수정하였습니다.

저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. deneb 2009.12.07 14:54 신고 Address Modify/Delete Reply

    감사합니다.

    그런데 실행이 안되는데
    저만 그런 것인지
    모두 그런 것인지 모르겠습니다.

    PE에서 보니 CPU와 I/O가 상당히 발생하고 있는데 설치창이 뜨질 않습니다.

    • deneb 2009.12.07 15:16 신고 Address Modify/Delete

      설치 로그 파일만 계속 만드는 것으로 봐서는
      이전 설치와에서 문제가 있는 것 같아
      이전 버전 삭제하고 새로운 버전으로 설치하니 제대로 되네요.
      몇몇 플러그인 때문에 그냥 덮어 씌웠는데 그것이 문제 였군요.

  2. deneb 2009.12.09 10:59 신고 Address Modify/Delete Reply

    이번에 {$NSIS}\Contrib\Language files 에 nsh 파일들이 모두 빠져있는데 일부러 빼신 것인지 아니면 실수하신 것인지 모르겠네요.
    처음에 당황했어요;;;

    • BlogIcon 헬마 2009.12.10 00:13 신고 Address Modify/Delete

      Nsh 파일은 빠지지 않았습니다. 뭔가 선택을 잘못하신것 같네요.

    • deneb 2009.12.10 17:01 신고 Address Modify/Delete

      설치한 nsis-H.M_Edition-setup_2009-12-07 삭제하고
      nsis-H.M_Edition-setup_2009-12-10를 설치하니 같은 현상입니다.
      당연히 기본 설치로 했습니다.
      이번에도 이전 버전이 설치되어 있는 상태에서 설치하게 되면 NSIS에 설치 log만 증가하는 현상이 있어서 모두 삭제해야 설치가 되더군요.

      아시다시피
      MUI 사용하는데 있어서
      !insertmacro MUI_LANGUAGE "Korean"를 넣게 되면
      를 설정하게 되면 {$NSIS}\Contrib\Language files\Korean.nsh에서 설정된 문자열을 가져오기 때문에 필요한데 헬마님의 배포본을 설치하게 되면 당 디렉토리에 nlf 파일만 설치 됩니다.

      저만 해도 이전버전을 백업을 하고 사용하는 편이라 붙혀 넣을 수 있었지만 없으신 분들은 이전 소스들이 컴파일이 되지 않을 듯 합니다.

      확인하셔야 할 것 같습니다.

  3. BlogIcon grandterran 2009.12.20 16:25 신고 Address Modify/Delete Reply

    안녕하세요... NSIS를 사용하면서 궁금하였던 질문을 올립니다. 질문이 너무 많아서 죄송하지만 자세히 설명해 주시면 감사하겠습니다. (아예 새글을 쓰셔서 올리는 것도.... 괜찮은 듯) - 질문이 많아서 다시 한 번 죄송합니다.

    1. ExperienceUI 1.1을 헬마님이 한국어로 변역하여 배포하셨죠? 그 인스톨러로 설치하여 ExperienceUI 1.1_Korea가 설치된 상태에서 그 인스톨러를 다시 실행하면 옵션이 나오죠.. 재설치를 할것인지 제거를 할것인지 체크박스가 나옵니다. 저도 그 부분의 스크립트를 사용하고 싶은데 어떻게 하면 되나요?

    2. 백신 같은 프로그램을 설치할 때 인스톨러가 그 제품의 이전버전이 시스템에 설치 되어 있나 검사하잖아요……. 그 설정은 어떻게 하나요?

    3. 제가 예를 들어 HKEY_LOCAL_MACHINE\SOFTWARE\Example 디렉터리를 만들어서 문자열값(REG_SZ) "Example"을 만들어서 값데이터를 "Example"이라고 만들라고 하려면 스크립트에 어떻게 적으면 되나요?

    4. ExperienceUI 1.1_Korea 인스톨러를 실행하면 몇초동안 ExperienceUI 1.1 로고가 뜹니다. 그건 어떻게 할 수 있나요?

    5. 인스톨러가 설치를 하면서 시스템 해상도를 변경할려면 어떡해 해야죠?

    6. 인스톨러의 설치 구성요소 선택 페이지에 설치프로그램 목록에 강제로 체크가 되어있게 하려면 어떡해 해야 하나요? 또, 설치구성요소 왼쪽에 +표시가 되어있어 여러 목록을 한번에 설치할수 있게, 또 부분적으로 설치할수 있게 만드는 건 어떡해 하나요?

    7. 인스톨러가 실행되면서 백그라운드에 배경이 깔리게하려면 어떡해 하나요?

    8. “알집”의 인스톨러 처럼 설치가 시작하면 광고 배너가 나오게 하려면 어떡해 하나요?

  4. BlogIcon [Creeper] 2012.01.17 20:45 신고 Address Modify/Delete Reply

    져근데요 컴스텀페이지를띄운다음 클릭해서 그건만선택을 해서 설치하는건 어뜨케해요?

헬마입니다.

최근에 댓글로 이제 NSIS Form Editor 나 Venis IX 등이 NSIS 리팩에 더 이상 포함되지 않는 것인지 질문이 올라왔더군요. 사실 가장 정확한 이유는 이것입니다. 제가 그것들이 이제 필요하지 않다고 생각하기 때문이었지요. 그리고 필요하지 않은 이유는 더 좋은 편집기인 Eclipse 에 NSIS 용 플러그인을 얹어서 사용할 수 있기 때문이었습니다.

아직 EclipseNSIS 를 많은 분들이 사용하고 계시지 못하는 것 같아 간단한 설치방법을 여기에 적어보겠습니다.

준비물 : 이클립스, JRE, EClipseNSIS

이클립스 내려받기 : http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.5.1-200909170800/eclipse-SDK-3.5.1-win32.zip

Java Runtime Environment 5 이상 :
http://java.sun.com/javase/downloads/index.jsp 에서 JRE 내려받기

EclipseNSIS :
http://eclipsensis.sourceforge.net/index.shtml
http://eclipsensis.sf.net/update

  참고 : EclipseNSIS 는 구동 OS를 체크하며 윈도 7 을 지원하지 않습니다. 따라서, 윈도 7을 사용한다면, Eclipse 를 호환성 옵션을 선택하고 비스타 호환성으로 실행해야합니다.

  이클립스용 NSIS의 플러그인은 당연히 이클립스가 필요합니다. ^^. 이클립스를 이미 사용하고 계시다면 그것을 그대로 사용하시면 되며, 처음 사용하시면 위의 링크에서 이클립스를 내려받으세요. 또한, 이클립스는 자바 프로그램이기때문에 JRE 라는 자바 가상머신을 설치해야합니다. 이미 설치된 버전이 없다면 두번째 링크에서 JRE를 내려받으세요.

이클립스 설치 :  
  이클립스는 별다른 설치과정이 없습니다. 단순히 설치하려는 폴더에 압축을 해제하면 됩니다.

이클립스 실행 : 
  이클립스를 실행하면 최초에 작업공간(workspace) 폴더를 선택하라고 나옵니다. 이클립스는 작업공간이라는 개념을 이해하는 것이 사용하는데 있어서 매우 중요합니다. 이클립스에게 있어서 작업공간이란 이클립스의 모든 설정이 저장되는 공간이며, 모든 프로젝트가 시작되는 공간입니다. 즉, 모든 프로젝트는 작업공간의 하위폴더로 시작된다고 할 수 있습니다.

이클립스 시작 : 
        

  이클립스를 시작하면 위와 같은 화면이 처음에 나타나며 작업할 작업공간을 선택하라고 합니다. 예제로 저같은 경우는 C:\Workspace 라는 폴더를 만들고 이곳을 지정하였습니다. 
  

  이클립스 구동이 끝나면 위와 같은 화면이 최초로 나타납니다. 아직 어떠한 작업도 시작한 적이 없기때문에 이와 같은 초기화면이 나타납니다. 이제 이클립스에 NSIS 플러그인을 설치해야겠지요. 
  이클립스의 플러그인을 설치하는 방법은 크게 2가지가 있습니다. 각 플러그인 웹사이트에서 직접 파일을 받아 압축을 풀어서 넣는 방법과 이클립스의 Update Manager 라는 기능을 이용해 간접적으로 설치하는 방법입니다. 이클립스는 Update Manager 를 통해 설치하길 권장하기 떄문에 이 방법으로 설치해보겠습니다.

EclipseNSIS 설치 : 
  이클립스를 실행한 후 Help->Install New Software 를 선택합니다.
          
   이제 여기서 사이트등을 검색해서 설치하는 것입니다. 먼저 Add 버튼을 눌러 아래와 같이 입력합니다.
          
  입력 후 잠시 기다리면 아래의 이미지와 같이 설치가능한 EclipseNSIS 항목들이 나타납니다. 설치할 항목을 선택하고 Next 버튼을 누릅니다. 주로 Source 를 제외하고 모두 설치하는 것이 좋습니다.
          
   Next 버튼을 누르면 이 소프트웨어를 설치하기 위해 다른 필요한 항목들이 있는지 자동으로 검색 후 실제로 설치할 항목을 아래 이미지와 같이 알려주고 마지막으로 확인합니다.
       
  설치할 항목을 확인하면 이제 라이센스 동의문이 나타나고 동의합니다. 동의는 보통 한번만 하면 됩니다. ^^. 동의를 하고 Finish 를 눌러 최종적으로 설치를 시작합니다.
          
  Finish 버튼을 누르면 설치과정이 백그라운드 작업으로 진행되며 설치가 끝나면 이클립스를 재시작하겠느냐고 묻는 질문이 나타납니다. 재시작하면 설치한 플러그인이 작동합니다.

EclipseNSIS 설정 :
          
  EClipseNSIS 는 기본적으로 레지스트리에서 NSIS 의 설치경로를 검색합니다. 하지만, 컴퓨터를 재설치하고 NSIS는 재설치하지 않고 그대로 쓰는 경우라거나 하면 NSIS의 설치경로 레지스트리가 없기때문에 수동으로 위치를 지정해야합니다. NSIS Home : 이라는 곳에 Makensis.exe 의 경로가 나타나있지 않으면 ... 버튼을 눌러 MakeNsis.exe 가 있는 폴더를 지정합니다. 이제 기본적으로 EclipseNSIS 를 사용할 준비가 끝났습니다.

저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. kimera 2009.12.13 23:12 신고 Address Modify/Delete Reply

    ㄴ님 안될거같습니다... 제가 레지로 연결 해봤는대도.. 인식을못합니다.

  2. BlogIcon wswse 2012.08.29 14:35 신고 Address Modify/Delete Reply

    이클립스는 자바 개발툴이며 JRE(일반유저용)로 하는것이아닌 JDK(개발자용)으로 하여야합니다.


헬마입니다.

며칠전에 방명록에서 관련 질문을 받고 써야지 하다가 게으름에 이제서야 글을 쓰게 되었습니다.

사실 코드는 굉장히 단순하구요.

사용자 정의 대화상자를 만들어서 체크박스 등을 통해 선택받는 방법은 2가지가 있습니다.

NSIS 2 초기에 사용되었던 INI 파일을 이용한 InstallOptions 라는 플러그인을 이용하는 방법이 첫째입니다.

둘째는, 비교적 최근 버전의 NSIS에 도입된 nsDialogs 플러그인을 이용하는 방법입니다.

후자의 방법이 속도도 훨씬 빠르며, 유연합니다. 또한, 더욱 여러가지 원하는 대로 통제도 가능하지요. 하지만, 그런만큼 윈도 프로그래밍의 지식을 갖추지 않으면 어렵습니다.

이번에 예제는 후자인 nsDialogs 플러그인을 사용하도록 작성했습니다.

작성 NSIS 버전은 2.45 버전입니다.

예제 테스트 방법은 NSIS 폴더에 넣고 컴파일 후 실행하여 보시면 됩니다.


컴파일 후에 실행하면 위와 같은 화면이 나오며, 선택하면 선택한 단축아이콘이 바탕화면에 생성됩니다.



!include LogicLib.nsh
!include nsDialogs.nsh

Name 'NSIS_EX'
OutFile 'Nsis_ex.exe'
XPStyle on

Page custom nsDialogEnter nsDialogLeave
Page instfiles

Var hMainDlg
Var hCheckBox1
Var hCheckBox2
Var CheckState

Section -
SectionEnd

Function nsDialogEnter
	nsDialogs::Create 1018
	Pop $hMainDlg
	
	${If} $hMainDlg == error
		Abort
	${EndIf}
	
	${NSD_CreateCheckBox} 0 0 100% 12u 'MakeNSISW.EXE 단축아이콘 생성'
	Pop $hCheckBox1
	
	${NSD_CreateCheckBox} 0 14u 100% 12u 'NSIS.EXE 단축아이콘 생성'
	Pop $hCheckBox2
	
	${NSD_SetState} $hCheckBox1 ${BST_CHECKED}
	nsDialogs::Show
	
FunctionEnd

Function nsDialogLeave
	${NSD_GetState} $hCheckBox1 $CheckState
	${If} $CheckState == ${BST_CHECKED}
		MessageBox MB_OK 'MakeNSISW 단축아이콘을 생성합니다.'
		CreateShortCut '$DESKTOP\MakeNSISW.LNK' '$EXEDIR\MakeNsisw.exe'
	${EndIf}
	
	${NSD_GetState} $hCheckBox2 $CheckState
	${If} $CheckState == ${BST_CHECKED}
		MessageBox MB_OK 'Nsis 단축아이콘 생성'
		CreateShortCut '$DESKTOP\nsis.exe' '$EXEDIR\nsis.exe'
	${EndIf}	
FunctionEnd
저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. BlogIcon enemy 2011.05.11 16:15 신고 Address Modify/Delete Reply

    하나 알고 갑니다.^^
    감사 드립니다.

  2. BlogIcon 지우 초이 2016.03.24 12:13 신고 Address Modify/Delete Reply

    nsdialog설명중에서 가장 간단하면서도 가장 명쾌합니다.
    왜쓰는지, 어떻게쓰는지 완벽히 이해하고갑니다!


헬마입니다.  

 오늘 우편함을 확인해보니 NSIS 에 관한 질문 우편이 왔더군요.

 제목이 단지 "헬마님" 이길래 처음에는 흔한 스팸인줄 알았습니다.

 최근들어 이상하게 스팸이 자주와서 곤란을 겪고 있거든요..

 그래서 내용을 보기도 전에 삭제키를 누르려다가 그래도 스팸 내용이나 한번 봐보자 하다가 스팸이 아니라는것을 알았습니다. ^^

 질문 내용을 보니 처음에 NSIS 를 익히시는 많은 분들의 고민이 그대로 있는거 같아서 이렇게 게시물로 올려보게되었습니다.

 -----

 NSIS 는 설치관리자입니다. 설치관리자의 가장 주된 역할은 간단히 말하면 파일을 가지고 있다가 다른 컴퓨터에 파일을 설치하는 것 이라고 할 수 있죠.

 그런데, NSIS 명령들을 쭉 살펴봐도 겉보기에는 파일을 가져오는 명령은 있는데 설치하는 명령은 보이질 않습니다.

 난감하지요. ^^ 그거 옆구리만 긁적 긁적 긁게되는데요.

 핵심은 딱 2개의 명령어로 이루어져 있습니다.

 하나는 SetOutPath 와 또 하나는 File 명령어 입니다.
 
 먼저는 SetOutPath 는 가지고 있는 파일들이 설치될 장소를 지정합니다.
 설치할 장소가 변경될 때마다 새로 지정해야하는 것은 당연하겠죠? ^^

 이제 제일 중요한 File 명령입니다.
 겉보기에는 이는 단지 설치관리자 제작 컴퓨터에서 파일을 가져오기만 하는 명령어로 보입니다.
 하지만, 이 명령어는 2가지 역할을 합니다.
 첫째, 컴파일시에는 설치관리자로 파일을 가져오는 역할 입니다.
 둘째, 스크립트가 실행될 때는 지정된 파일을 SetOutPath 에 지정된 폴더로 설치하는 역할입니다.

 이렇게 2가지 명령어를 이용하여 파일을 설치하는 작업을 할 수 있습니다.

[my folder]
\->Release
\--->Windows
\------>aaa.dll
\--->Program
\------>main.exe
\->Source

 우편으로 질문이 왔던 위와 같은 상황이라면, 아래와 같이 코드를 작성하시면 됩니다.


	Name 'NSIS_EX_TEST'
	OutFile 'NSIS_EX_TEST.EXE'
	InstallDir '$PROGRAMFILES\MyProgram'

	Section 'Ex_Test'
		SetOutPath $WINDIR
		File 'C:\\my Folder\\Release\\Windows\\aaa.dll'
		
		SetOutPath $INSTDIR
		File 'C:\\my Folder\\Release\\Program\\main.exe'
	SectionEnd
저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

헬마입니다.

매우 매우 오랜만에 NSIS 관련한 글을 포스팅하게 되었네요.

NSIS 의 SearchParse 와 SearchReplace

NSIS 에 새로 컴파일 타임 명령어로 SearchParse 와 SearchReplace 라는 명령이 추가되었습니다.

사실 추가된지는 꽤 되었습니다. 하지만, 의외로 쓰시는 분이 별로 없는듯하여 이번에 간단한 글을 작성해보려 합니다.

이 명령들은 사실 일반적으로는 별로 쓰일일이 드문편입니다. 주로 이 명령들이 쓰이는 곳은 다른 언어의 설정파일과 설정내용을 동기화할 때 쓰이지요.

예를 들어, C++ 로 윈도 응용 프로그램을 작성하면 보통 제품의 버전번호는 소스코드의 rc 확장자를 가진 리소스 파일에 저장되고 관리됩니다.

하지만, NSIS로 설치관리자를 만들때 VIAddVersionKey 라던가 VIProductVersion 이라는 속성을 사용해서 설치관리자에도 버전을 설정할 수 있지만, 이 둘을 언제나 일치시키는 것은 역시나 귀찮은 일이지요.

이럴때 위의 두가지 컴파일 타임 명령어를 사용하면 자동으로 동기화를 시킬 수 있어요. ^^

간단한 예제를 통해서 그 방법을 적어보겠습니다. ^^

사실, 저도 한동안 NSIS 작성할 일이 없어서 손을 안대고 있다가 최근에 회사 프로젝트의 설치관리자를 수정하다가 적용해보고 적는 것 입니다 ^^

준비물 :
NSIS - 사용하는 버전이 2.45 버전이라면 http://nsis.sf.net 에서 일일빌드를 받아서 설치하세요. 공식배포 2.45버전에는 !searchparse 명령에 버그가 있습니다
동기화할 파일

먼저, 도움말을 살펴보죠.

	!searchparse

		[/ignorecase] [/noerrors] [/file] source_string_or_file substring_start OUTPUTSYMBOL1 [substring [OUTPUTSYMBOL2 [substring ...]]]
source_string_or_file 을( /file 을 설정하면 파일이름으로, 설정하지 않으면 문자열로 취급 ) 분석하여 substring_start 을 검색합니다.
substring_start 가 검색되면 OUTPUTSYMBOL1 이 문자열의 나머지 부분( substring 을 설정했고 이 문자열이 검색되면 이 문자열은 제외됨 ) 이 선언됩니다. 몇 개의 OUTPUTSYMBOLx 라도 설정될 수 있으며 마지막의 substring 은 선택적입니다.
/noerrors 가 설정되면, 모든 문자열이 일치하지 않아도 되며 ( 모든 OUTPUTSYMBOLx ) 후에 검색되지 않은 하위문자열은 무시됩니다.
/file 가 설정되면, 파일은 줄의 모음으로 취급됩니다. 파일은 모든 하위문자열이 일치할 때 까지 검색됩니다. /noerrors 가 설정되고 모든 문자열이 일치하지 않았다면 가장 많은 기호가 일치한 첫 행이 사용됩니다.
	!searchreplace

		[/ignorecase] symbol_out source_string searchfor replacewith 
source_string 을 검색하여 이 문자열에서 searchfor 를 모두 replacewith 로 치환합니다. !define 과는 다르게 !searchreplace 는 여러분이 경고 또는 오류없이 symbol_out 을 재정의할 수 있도록합니다.
음, 솔직히 제가봐도 알쏭달쏭합니다. 어떻게 쓰라는 건지 영 감이 안오죠.

예제로 사용할 파일 소스
- 첨부파일로 들어있는 rc 파일을 사용하시면 됩니다.

이제 첫 단계로, 어느 부분을 동기화 시킬지 결정해야죠. 저는 rc 파일에서 제품 버전정보를 가져와서 이를 언제나 설치관리자의 버전 정보로 사용하고 싶어요.
그래서 rc 파일을 살펴보니 PRODUCTVERSION 1,0,0,1 이라는 부분이 보입니다. 이 부분을 가져다가 요리저리 가공하면 어찌될 것 같네요.

아래는 예제 코드에요.
간단한 주석을 실었습니다.

Name 'NSIS_EX'
OutFile 'NSIS_EX.EXE'

!include MUI.nsh
!insertmacro MUI_LANGUAGE "Korean"

; Calc_test.rc 파일에서 PRODUCTVERSION 이라는 문자열을 찾은 후 그 줄의 그 다음 부분을 VERSION_NAME 이라는 이름으로 선언. ( 변수가 아니라 !define 으로 선언한 것과 같은 효과 입니다 )
!searchparse /ignorecase /file '.\Calc_Test.rc' 'PRODUCTVERSION' 'VERSION_NAME' ''
; rc 파일을 보시면 버전 번호를 지정할 때는 쉼표를 사용하게 되어있습니다. 하지만, VIAddProductVersion 을 사용할때는 마침표로 변경해야합니다. 
; 하지만, !define 으로 선언한 것은 일반적인 방법으로는 쉽게 변경할 수 없습니다. 이를 해결하기위해 !searchreplace 가 추가되었습니다. 
; VERSION_NAME 이라는 기호에서 "," 를 찾아 "." 으로 변경합니다. 처음에 기호 이름을 지정할 때 ${} 로 둘러싸지 않은 점을 눈여겨보세요.
!searchreplace /ignorecase VERSION_NAME ${VERSION_NAME} "," "."

VIAddVersionKey /LANG=${LANG_KOREAN} 'ProductVersion' '${VERSION_NAME}'
VIAddVersionKey /LANG=${LANG_KOREAN} "ProductName" "NSIS_EX"
VIAddVersionKey /LANG=${LANG_KOREAN} "Comments" "NSIS_EX Setup"
VIAddVersionKey /LANG=${LANG_KOREAN} "CompanyName" "초짜 플머 헬마"
VIAddVersionKey /LANG=${LANG_KOREAN} "LegalTrademarks" ""
VIAddVersionKey /LANG=${LANG_KOREAN} "LegalCopyright" ""
VIAddVersionKey /LANG=${LANG_KOREAN} "FileDescription" "NSIS_EX"
VIAddVersionKey /LANG=${LANG_KOREAN} "FileVersion" "${VERSION_NAME}"
VIProductVersion '${VERSION_NAME}'

Function .onInit
	SetSilent silent
	
	MessageBox MB_OK ${VERSION_NAME}
FunctionEnd

Section -
SectionEnd

저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요


헬마입니다.

얼마전에 이에 대해 묻는 글이 올라온 것을 보고 간단하게나마 사용하는 법을 알려드리려고 이 글을 작성합니다.

이 글 예제에 필요한 도구들


한글화 도구 :
Sisulizer 2008 - 빌드 285 에서 작성하였습니다.
HTML Help Workshop 1.3 - MS 에서 CHM 파일을 제작하기 위해 배포하는 도구로 여기에서 받으실 수 있습니다.
예제에 사용된 NSIS 도움말 2개. - 포함된 첨부파일로 받으시면 됩니다.

준비하기 :
HTML Help WorkShop 를 반드시 먼저 설치하셔야합니다.

먼저 한글화 작업을 수행할 작업폴더를 생성합니다. 이곳에 한글화 작업내용과 결과물 들이 저장이 될겁니다.
이곳에 먼저 NSIS.2.4.4.CHM 파일을 NSIS.CHM 파일로 이름을 변경 후 Sisulizer 에서 새로 만들기를 선택합니다.
그러면 아래와 같은 대화상자가 나타납니다. 우리는 CHM 파일 하나만 할 것이므로 파일 또는 파일 지역화를 선택합니다.

선택하면 한글화를 수행할 파일을 선택하라고 나타납니다. 저는 폴더에 파일 3개를 모두 넣었기때문에 아래와 같은 화면입니다.
이곳에서 NSIS.CHM 파일을 선택합니다.

파일을 선택하면 HTML 도움말 파일에 대해 어떠한 형식을 사용해서 작업을 수행할 것인지 묻습니다. 기본 상태로 놔둬도 크게 문제되지 않습니다.

이번에는 이 CHM 파일을 어떤 언어로 지역화 할 것인지 선택합니다. 당연히 한국어를 선택해야겠죠 ^^

자 이제 첫 시작화면이 나타납니다. Sisulizer 가 NSIS 도움말을 스캔하고 위와 같은 화면이 나타납니다. 위에는 미리보기 란이 있고 밑에는 번역하는 공간입니다.


자 여기서 간단하게 몇가지 문장을 한글로 변경한 후 한글화된 파일을 생성하여 보겠습니다.
예제로 첫문장 NSIS Users Manual -> NSIS 사용자 설명서로 변경합니다.


그 후 위의 메뉴에 보면 F6 단축키를 통해 지역화된 파일을 생성 할 수 있습니다. 작업이 끝나면 작업 폴더에는 ko 라는 하위 폴더가 생성되고 이곳에 지역화된 도움말 파일이 들어있습니다. 아래 화면은 간단하게 문장을 바꾼 지역화된 도움말을 한글화한 화면입니다.


이렇게되면 간단한 한글화 과정이 끝났습니다.

그러면, 이제 간단한 의문이 생깁니다. NSIS 는 꾸준히 버전업이 되고 있는 프로그램입니다. 도움말도 꾸준히 버전업이 되고 있습니다.
그렇다면 프로그램이 버전업이 되면서 새로 도움말이 변경되면 어떻게 기존것과 함께 작업을 해나갈 수 있는가 하는 점 입니다.

이제 부터 이에 대해 간단한 요령을 올려보겠습니다.
먼저, Sisulizer 를 종료합니다. 프로젝트는 당연히 저장을 해야겠지요. ^^
이제 가지고 있는 두번째 파일인 NSIS.2.4.5.CHM 파일을 NSIS.CHM 파일로 이름을 변경한 후에 작업 폴더로 복사합니다. 당연히 기존 파일을 덮어쓰이겠지요.
 

그 후에 메뉴의 맨 위를 보면 F5 단축키를 통해 변경된 점을 스캔할 수 있습니다.
먼저 F5 를 누릅니다.
그러면 먼가 밑에 좌르륵 작업 현황이 나타나면서 새로 변경된 사항에 추가 몇개 삭제 몇개 등등이 나타납니다.
그러면 이제 어떤 항목이 추가됐는지 알아야겠지요.

밑에 화면의 오른쪽 부분을 잘 보시면 열 상태라고 되어 있고 거기에 새로 만들기라고 되어있습니다. 영문으로는 New 라고 되어있을겁니다.
열 상태에서 저부분만 선택하고 나머지를 해제하면 번역할 항목들 중에 새로 생성된 항목만 나타납니다. 마찬가지로 변경됨(Changed)  을 선택하면
변경된 사항을 볼 수 있습니다.
이렇게 해서 변경된 부분을 중점적으로 확인하고 번역할 수 있습니다.
아래는 변경된 부분중에 간단하게 몇개를 번역한 것 입니다.



위의 화면은 간단하게 변경한 후 원래 변경했던 NSIS 사용자 설명서 라는 부분에 이어 이번에 추가로 번역한 부분도 한글화된 모습을 캡춰한 것입니다.



이상으로 스샷만 많은 날림 도움글을 마칩니다. 이글이 많은 도움이 되지는 않겠지만,  이런식으로 작업하는구나 하는 정도라고 전달이 되면 좋겠네요.

참고로, NSIS 도움말은 Sisulizer 를 통해 번역하지 않았습니다. ^^
NSIS 도움말은 Halibut 이라는 도구를 통해 텍스트 문서를 마치 LaTex 를 사용하는 것 처럼 HTML 파일로 변경 후 Html Help Workshop 으로 직접 CHM 파일을 만드는 구조입니다. 덕분에 작업 하는 것이 좀 더 까다롭습니다 ^^








저작자 표시 비영리 변경 금지
신고

'한글화' 카테고리의 다른 글

Sisulizer 를 이용하여 CHM 파일을 한글화 하기  (4) 2009.06.24
TweakVI Basic Build 1045 기본 한글화 파일  (2) 2006.12.22
mIRC 6.21 한글판  (2) 2006.12.01
Passolo v6.0.0.1 Full  (2) 2006.11.09

댓글을 달아 주세요

  1. 와우 2009.06.24 16:59 신고 Address Modify/Delete Reply

    아, 이 뜨끔한 기분은 뭘까요?
    정말로 고맙습니다. 이처럼 명강의를 보군요.
    근데요....


    저기...
    또 귀찮게 해드려서.... 죄송한데..요..
    Sisulizer 언어를 한글로 어떻게 바꾸나요?
    사진엔 한글로 메뉴들이 나와서요
    (아무쪼록 귀찮게 해드려서 죄송합니다. 그리고 강의 감사합니다.)

  2. jucke 2009.07.03 12:18 신고 Address Modify/Delete Reply

    이렇게도 가능하군요.. 특히 변경된 부분만 추출해주는 기능은 정말 막강하네요. 삽질 반복작업을 줄여주겠네요. ^^

    저도 한글화 파일이 궁금하네요. Sisulizer.KO 파일이 필요한것 같은데 인터넷 검색을 해봐도 안나오더군요. ^^; 부탁드려도 될까요?

  3. 조금더 2009.07.08 14:12 신고 Address Modify/Delete Reply

    언제 부턴가 한글화 강의를 부탁 드리고 싶었는데 감사 합니다

    한가지 더 부탁 드린다면

    간단한 프로그램 한글화좀 자세히 부탁 드립니다

  4. 궁금 2009.10.02 08:18 신고 Address Modify/Delete Reply

    Sisulizer 2008 290 으로 winzip14 베타버전을 메뉴판만 한글로 바꿔 볼려고 했는데 WZVINFO.DLL 파일때문에 재설치하라는 문구만 뜨는네요; 어떻게 하면 한글화를 할 수 있을까요?

    Lingobit 6 으로 하면 잘되거든요.

NSIS 2.45 - H.M -

한글화/NSIS 2009.06.10 21:35 |

헬마입니다.

NSIS 2.45 버전이 나왔네요.

이번버전은 윈도 7 지원에 대한 추가가 주 내용입니다.

저작자 표시 비영리 변경 금지
신고

'한글화 > NSIS' 카테고리의 다른 글

NSIS 2.45 - H.M -  (2) 2009.06.10
NSIS 2.44 - H.M -  (0) 2009.02.25
NSIS 2.43 - H.M -  (1) 2009.02.13
NSIS 2.42 - H.M -  (2) 2009.01.06
NSIS 2.41 - H.M -  (0) 2008.12.11
NSIS 2.40 - H.M -  (1) 2008.10.14

댓글을 달아 주세요

  1. 질문자 2009.11.10 22:09 신고 Address Modify/Delete Reply

    헬마님... 죄송하지만 질문좀 올리겠습니다..

    이젠.,..NIS Edit,NSIS Form Designer,Venis 이3개 추가 안하고... 하는건가요?

    3개가 괜찬았었는대..;;

  2. BlogIcon 이똑똑 2013.05.21 13:42 신고 Address Modify/Delete Reply

    3.0a0버전 나왔어요.

NSIS 2.44 - H.M -

한글화/NSIS 2009.02.25 15:53 |

헬마입니다.

NSIS 2.44 버전입니다.

2.43 버전에 있던 특정 아이콘에서 스크립트 빌드가 되지 않는 버그를 수정했네요.

핫픽스 수준이라서 이걸 제외하고는 별다른 점이 없습니다.

저작자 표시 비영리 변경 금지
신고

'한글화 > NSIS' 카테고리의 다른 글

NSIS 2.45 - H.M -  (2) 2009.06.10
NSIS 2.44 - H.M -  (0) 2009.02.25
NSIS 2.43 - H.M -  (1) 2009.02.13
NSIS 2.42 - H.M -  (2) 2009.01.06
NSIS 2.41 - H.M -  (0) 2008.12.11
NSIS 2.40 - H.M -  (1) 2008.10.14

댓글을 달아 주세요

티스토리 툴바