본문 바로가기

DuruInstaller

두루 인스톨러 v1.5 프로젝트 파일 예제

두루 인스톨러는 2003년경에 처음으로 개발에 들어간 개인적인 프로젝트 였다.물론 꾸준히 한것이 아니었지만..
처음에는 UFO빌더,인스톨빌드라는 예명하에,인스톨쉴드와 같이 UI기반으로 만들었다가 회사일등에 일정을 낼수가 없어 완전하게 개발하지 않은 채 몇년을 또 그대로 방치하고 말았다.
그리고,그 과정에서 내장 스크립트언어의 필요성을 느껴,중간에 착수하였던것이 바로 두루 스크립트 언어의 모태가 되었다.

기존의 UI식 프로젝트 빌드 인터페이스에서 보다 비록 UI는 없어졌지만 간결한 명령어 위주의 스크립트 체제로 변환 하였다.

아래는 실제 두루에디트 설치에 사용된 두루 인스톨러의 프로젝트 파일이다.
귀찮아서 그동안 소스에 FIX하여 빌드하던 것을 외부 파일로 빼냈고 NSIS 와 같은 비슷한 명령어로 구성하였다.
단,프로젝트 파일은 함수기능이 안되므로 동적인 기능을 추가하지 못한다.

이부분은 나중에,시간이 되면 인스톨쉴드같이 별도의 스크립트 언어 영역으로 구현하면 될것이다.
이 부분에 사용된 스크립트 성격의 명령코드는 모두 자작 두루 스크립트(다물 스크립트) 의 일부 소스코드로 구현 한 것들이다.

우선,프로젝트에서는 함수적 언어 호출은 안되지만,#define,#if,#else,#endif,#ifndef,#elif  와 같은 매크로 성격의 전처리기를 지원한다.

/* -------------------------------------------------------------------
  DURU INSTALLER Project Script File(DuruScript)
  This source code is a part of DuruScript developped by me.
  If you Edit more easily,get DURUEDIT at http://duruedit.com freely.
  http://www.durumul.com http://www.duruedit.com http://www.krkim.net
  Author: KRKIM (Kyeoung Rae Kim) (durumul@gmail.com)
  ===================================================================*/

#define INSTALLMODE

#ifdef INSTALLMODE
 #define BUILDMODE "Install"
#else
 #define BUILDMODE "Update"
#endif

;If Install it could be omitted.

Project BUILDMODE

; -------------------------------------------------------------------
; General Setting
; -------------------------------------------------------------------
;ProjectDir [path] ;default is the path located in project file.

ProductName "DuruEdit"
InstallDir "$PROGRAMFILES/$PRODUCTNAME"
#ifdef INSTALLMODE
OutFile "$PROJECTDIR/TestSetup.exe"
#else
OutFile "$PROJECTDIR/Update.exe"
#endif

;This command could not be used on free version.

#ifdef INSTALLMODE
#else
#endif

//LangID File
License 1042 "./DuruEdit/License.rtf"
Inform  1042 "./DuruEdit/Inform.rtf"

#ifdef INSTALLMODE
SFXFile "$DISHOMEDIR/SFXInstall.exe"
#else
SFXFile "$DISHOMEDIR/SFXUpdate.exe"

//For UpdateUrl FTP eg) "ftp://userid:password@domain.com/update/rg"
UpdateUrl "http://tsa.com.ne.kr/update/duruedit"
//Target File to check point if exists a new version on server.
UpdateExe "DuruEdit.exe"
#endif

SetRes TreeBitmap "$DISHOMEDIR/modern.bmp"
SetRes InstallIcon "$DISHOMEDIR/install.ico"
SetRes UninstallIcon "$DISHOMEDIR/uninstall.ico"
SetRes UpdateIcon "$DISHOMEDIR/update.ico"

; -------------------------------------------------------------------
; National Language System Resource
; -------------------------------------------------------------------
SetLang 1033 1042

LangStr 1033 "$UID_UNINSTNAME" "Remove DuruEdit"
LangStr 1042 "$UID_UNINSTNAME" "DuruEdit 제거"

LangStr 1033 "$UID_UPDATENAME" "Update DuruEdit"
LangStr 1042 "$UID_UPDATENAME" "업데이트"

; -------------------------------------------------------------------
; File Group
; -------------------------------------------------------------------

Component "System" Plugin
 TargetGroup "O.S Independent" "$PLUGINDIR"
 TargetFile "./welcome.bmp" WelcomeImage
 TargetFile "./finish.bmp" FinishImage
 TargetFile "./header.bmp" HeaderImage
 ;not support calling custom DLL yet.
 ;TargetFile  "./MyCustom.DLL"
EndComponent

Component "표준설치"
 Component "기본프로그램" "" "" "ReadOnly|Checked"
  TargetGroup "프로그램" "$INSTALLDIR"
  TargetFile  "./DuruEdit/Startup.dll" delete
  TargetFile  "./DuruEdit/DuruEdit.vfo" delete
  TargetFile  "./DuruEdit/DuruEdit.exe"
  TargetFile  "./DuruEdit/DEConfig.dll"
  TargetFile  "./DuruEdit/DuruEdit.dll"
  TargetFile  "./DuruEdit/DuruEdit.jpg"
  TargetFile  "./DuruEdit/DuruFTP.dll"
  TargetFile  "./DuruEdit/DuruXML.dll"
  TargetFile  "./DuruEdit/Splash.dll"
  TargetFile  "./DuruEdit/vfo.dll"
  TargetFile  "./DuruEdit/DEShl.dll"
  TargetFile  "./DuruEdit/DEShl64.dll"
  TargetFile  "./DuruEdit/Update.exe"
  TargetFile  "./DuruEdit/SkinBar.bmp"
  TargetFolder "$INSTALLDIR/nls"
  TargetFile  "./DuruEdit/nls/RC1042.nls"
  TargetFolder "$COMMONAPPDATA/DuruEdit"
  TargetFile  "./DuruEdit/DuruEdit.vfo"
  Description "기본 프로그램을 설치합니다."
 EndComponent
 Component "환경 및 샘플"
  TargetGroup "프로그램" "$INSTALLDIR"
  TargetFile  "./DuruEdit/UpdateLog.txt"
  TargetFile  "./DuruEdit/Example.cpp"
  TargetFile  "./DuruEdit/Example.h"
  TargetFile  "./DuruEdit/FTPDefault.xml"
  TargetFile  "./DuruEdit/History.txt"
  Description "프로그램 실행에 필요한 파일을 설치합니다"
 EndComponent
EndComponent

; -------------------------------------------------------------------
; Start Menu ShortCut Icon
; -------------------------------------------------------------------
ShortCut
 ShortCutFolder "$PROGRAMS/$PRODUCTNAME" "$PRODUCTNAME"
 ShortCutFile   "DuruEdit" "$INSTALLDIR/DuruEdit.exe"
 ShortCutFile   "$UID_UNINSTNAME" "$INSTALLDIR/uninstall.exe"
 ShortCutFile   "$UID_UPDATENAME" "$INSTALLDIR/Update.exe"
EndShortCut

; -------------------------------------------------------------------
; Registry Setting
; -------------------------------------------------------------------
Registry
 SetRegKey "$REGKEY_HKCU/Software/DuruEdit/IDE/MRU"
 SetRegValue "01" "***$INSTALLDIR/UpdateLog.txt"
 SetRegKey "$REGKEY_HKCU/Software/DuruEdit"
 SetRegValue "StartUp" "dword:0000FF00"
 SetRegKey "$REGKEY_HKLM/SYSTEM/CurrentControlSet/Services/SharedAccess/Parameters/FirewallPolicy/StandardProfile/AuthorizedApplications/List"
 SetRegValue "$INSTALLDIR/DuruEdit.exe" "$INSTALLDIR/DuruEdit.exe:*:Enabled:DuruEdit"
 ;SetRegValue "" "aaa" ;기본값 변경시
 
EndRegistry

WriteUninstaller true ;flag is if add to ControlPanel Add/Remove List

;Exec after finishing installation
;Exec       "$INSTALLDIR/DuruEdit.exe" ""

;Exec only Pre-uninstall

ExecUninst "$INSTALLDIR/DuruEdit.exe" "-uninstall"

EndProject
 
 


위 화면은 두루인스톨러를 실행하여 나타나는 위 프로젝트 파일의 컴포넌트 명령의 결과이다.
또한, 트리 컨트롤을 커스터 마이징하여 우측에 크기를 보여주는 컬럼란을 추가 하였다.