Datei #zsgsyk30-3488 - NSIS - Quellcode

Hochgeladen von lotiez - 27/07/2010 11:59 - 60 Zugriffe
Quellcode
  1. ; LZMA
  2. ;--------------------------------
  3. ;
  4.  
  5. !include "MUI.nsh"
  6.  
  7. ; AutoCloseWindow true
  8. ; ShowInstDetails show
  9.  
  10.  
  11. ;--------------------------------
  12. ;
  13. ; 
  14. ;
  15.  
  16. ;!define _TEST_
  17.  
  18.  
  19. ;--------------------------------
  20. ;
  21. ; version
  22. ;
  23.  
  24. !ifdef _TEST_
  25. 	!define VERSION		"0.01a"
  26. 	!define VERSION_STR	"0001a"
  27. 	!define SRC_DIR		"NT_TEST_0001a"
  28. !else ;_TEST_
  29. 	!define VERSION		"NT_1.91E"
  30. 	!define VERSION_STR	"NT191E"
  31. 	!define SRC_DIR		"Trickster"
  32. !endif ;_TEST_
  33.  
  34. ;--------------------------------
  35. ;
  36. ; window version infomation 
  37. ;
  38.  
  39. ; GetWindowsVersion
  40. ;
  41. ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
  42. ; Updated by Joost Verburg
  43. ;
  44. ; Returns on top of stack
  45. ;
  46. ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista)
  47. ; or
  48. ; '' (Unknown Windows Version)
  49. ;
  50. ; Usage:
  51. ;   Call GetWindowsVersion
  52. ;   Pop $R0
  53. ;   ; at this point $R0 is "NT 4.0" or whatnot
  54.  
  55. Function GetWindowsVersion
  56.  
  57.   Push $R0
  58.   Push $R1
  59.  
  60.   ClearErrors
  61.  
  62.   ReadRegStr $R0 HKLM \
  63.   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
  64.  
  65.   IfErrors 0 lbl_winnt
  66.  
  67.   ; we are not NT
  68.   ReadRegStr $R0 HKLM \
  69.   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
  70.  
  71.   StrCpy $R1 $R0 1
  72.   StrCmp $R1 '4' 0 lbl_error
  73.  
  74.   StrCpy $R1 $R0 3
  75.  
  76.   StrCmp $R1 '4.0' lbl_win32_95
  77.   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
  78.  
  79.   lbl_win32_95:
  80.     StrCpy $R0 '95'
  81.   Goto lbl_done
  82.  
  83.   lbl_win32_98:
  84.     StrCpy $R0 '98'
  85.   Goto lbl_done
  86.  
  87.   lbl_win32_ME:
  88.     StrCpy $R0 'ME'
  89.   Goto lbl_done
  90.  
  91.   lbl_winnt:
  92.  
  93.   StrCpy $R1 $R0 1
  94.  
  95.   StrCmp $R1 '3' lbl_winnt_x
  96.   StrCmp $R1 '4' lbl_winnt_x
  97.  
  98.   StrCpy $R1 $R0 3
  99.  
  100.   StrCmp $R1 '5.0' lbl_winnt_2000
  101.   StrCmp $R1 '5.1' lbl_winnt_XP
  102.   StrCmp $R1 '5.2' lbl_winnt_2003
  103.   StrCmp $R1 '6.0' lbl_winnt_vista lbl_error
  104.  
  105.   lbl_winnt_x:
  106.     StrCpy $R0 "NT $R0" 6
  107.   Goto lbl_done
  108.  
  109.   lbl_winnt_2000:
  110.     Strcpy $R0 '2000'
  111.   Goto lbl_done
  112.  
  113.   lbl_winnt_XP:
  114.     Strcpy $R0 'XP'
  115.   Goto lbl_done
  116.  
  117.   lbl_winnt_2003:
  118.     Strcpy $R0 '2003'
  119.   Goto lbl_done
  120.  
  121.   lbl_winnt_vista:
  122.     Strcpy $R0 'Vista'
  123.   Goto lbl_done
  124.  
  125.   lbl_error:
  126.     Strcpy $R0 ''
  127.   lbl_done:
  128.  
  129.   Pop $R1
  130.   Exch $R0
  131.  
  132. FunctionEnd
  133.  
  134. ;--------------------------------
  135. ;
  136. ; window version infomation end
  137. ;
  138.  
  139. ;--------------------------------
  140. ;
  141. ; WordFind
  142. ;
  143. Function WordFind
  144. 	!define WordFind `!insertmacro WordFindCall`
  145.  
  146. 	!macro WordFindCall _STRING _DELIMITER _OPTION _RESULT
  147. 		Push `${_STRING}`
  148. 		Push `${_DELIMITER}`
  149. 		Push `${_OPTION}`
  150. 		Call WordFind
  151. 		Pop ${_RESULT}
  152. 	!macroend
  153.  
  154. 	Exch $1
  155. 	Exch
  156. 	Exch $0
  157. 	Exch
  158. 	Exch 2
  159. 	Exch $R0
  160. 	Exch 2
  161. 	Push $2
  162. 	Push $3
  163. 	Push $4
  164. 	Push $5
  165. 	Push $6
  166. 	Push $7
  167. 	Push $8
  168. 	Push $9
  169. 	Push $R1
  170. 	ClearErrors
  171.  
  172. 	StrCpy $9 ''
  173. 	StrCpy $2 $1 1
  174. 	StrCpy $1 $1 '' 1
  175. 	StrCmp $2 'E' 0 +3
  176. 	StrCpy $9 E
  177. 	goto -4
  178.  
  179. 	StrCpy $3 ''
  180. 	StrCmp $2 '+' +6
  181. 	StrCmp $2 '-' +5
  182. 	StrCmp $2 '/' restart
  183. 	StrCmp $2 '#' restart
  184. 	StrCmp $2 '*' restart
  185. 	goto error3
  186.  
  187. 	StrCpy $4 $1 1 -1
  188. 	StrCmp $4 '*' +4
  189. 	StrCmp $4 '}' +3
  190. 	StrCmp $4 '{' +2
  191. 	goto +4
  192. 	StrCpy $1 $1 -1
  193. 	StrCpy $3 '$4$3'
  194. 	goto -7
  195. 	StrCmp $3 '*' error3
  196. 	StrCmp $3 '**' error3
  197. 	StrCmp $3 '}{' error3
  198. 	IntOp $1 $1 + 0
  199. 	StrCmp $1 0 error2
  200.  
  201. 	restart:
  202. 	StrCmp $R0 '' error1
  203. 	StrCpy $4 0
  204. 	StrCpy $5 0
  205. 	StrCpy $6 0
  206. 	StrLen $7 $0
  207. 	goto loop
  208.  
  209. 	preloop:
  210. 	IntOp $6 $6 + 1
  211.  
  212. 	loop:
  213. 	StrCpy $8 $R0 $7 $6
  214. 	StrCmp $8$5 0 error1
  215. 	StrCmp $8 '' +2
  216. 	StrCmp $8 $0 +5 preloop
  217. 	StrCmp $3 '{' minus
  218. 	StrCmp $3 '}' minus
  219. 	StrCmp $2 '*' minus
  220. 	StrCmp $5 $6 minus +5
  221. 	StrCmp $3 '{' +4
  222. 	StrCmp $3 '}' +3
  223. 	StrCmp $2 '*' +2
  224. 	StrCmp $5 $6 nextword
  225. 	IntOp $4 $4 + 1
  226. 	StrCmp $2$4 +$1 plus
  227. 	StrCmp $2 '/' 0 nextword
  228. 	IntOp $8 $6 - $5
  229. 	StrCpy $8 $R0 $8 $5
  230. 	StrCmp $1 $8 0 nextword
  231. 	StrCpy $R1 $4
  232. 	goto end
  233. 	nextword:
  234. 	IntOp $6 $6 + $7
  235. 	StrCpy $5 $6
  236. 	goto loop
  237.  
  238. 	minus:
  239. 	StrCmp $2 '-' 0 sum
  240. 	StrCpy $2 '+'
  241. 	IntOp $1 $4 - $1
  242. 	IntOp $1 $1 + 1
  243. 	IntCmp $1 0 error2 error2 restart
  244. 	sum:
  245. 	StrCmp $2 '#' 0 sumdelim
  246. 	StrCpy $R1 $4
  247. 	goto end
  248. 	sumdelim:
  249. 	StrCmp $2 '*' 0 error2
  250. 	StrCpy $R1 $4
  251. 	goto end
  252.  
  253. 	plus:
  254. 	StrCmp $3 '' 0 +4
  255. 	IntOp $6 $6 - $5
  256. 	StrCpy $R1 $R0 $6 $5
  257. 	goto end
  258. 	StrCmp $3 '{' 0 +3
  259. 	StrCpy $R1 $R0 $6
  260. 	goto end
  261. 	StrCmp $3 '}' 0 +4
  262. 	IntOp $6 $6 + $7
  263. 	StrCpy $R1 $R0 '' $6
  264. 	goto end
  265. 	StrCmp $3 '{*' +2
  266. 	StrCmp $3 '*{' 0 +3
  267. 	StrCpy $R1 $R0 $6
  268. 	goto end
  269. 	StrCmp $3 '*}' +2
  270. 	StrCmp $3 '}*' 0 +3
  271. 	StrCpy $R1 $R0 '' $5
  272. 	goto end
  273. 	StrCmp $3 '}}' 0 +3
  274. 	StrCpy $R1 $R0 '' $6
  275. 	goto end
  276. 	StrCmp $3 '{{' 0 +3
  277. 	StrCpy $R1 $R0 $5
  278. 	goto end
  279. 	StrCmp $3 '{}' 0 error3
  280. 	StrLen $3 $R0
  281. 	StrCmp $3 $6 0 +3
  282. 	StrCpy $0 ''
  283. 	goto +2
  284. 	IntOp $6 $6 + $7
  285. 	StrCpy $8 $R0 '' $6
  286. 	StrCmp $4$8 1 +6
  287. 	StrCmp $4 1 +2 +7
  288. 	IntOp $6 $6 + $7
  289. 	StrCpy $3 $R0 $7 $6
  290. 	StrCmp $3 '' +2
  291. 	StrCmp $3 $0 -3 +3
  292. 	StrCpy $R1 ''
  293. 	goto end
  294. 	StrCmp $5 0 0 +3
  295. 	StrCpy $0 ''
  296. 	goto +2
  297. 	IntOp $5 $5 - $7
  298. 	StrCpy $3 $R0 $5
  299. 	StrCpy $R1 '$3$0$8'
  300. 	goto end
  301.  
  302. 	error3:
  303. 	StrCpy $R1 3
  304. 	goto error
  305. 	error2:
  306. 	StrCpy $R1 2
  307. 	goto error
  308. 	error1:
  309. 	StrCpy $R1 1
  310. 	error:
  311. 	StrCmp $9 'E' 0 +3
  312. 	SetErrors
  313.  
  314. 	end:
  315. 	StrCpy $R0 $R1
  316.  
  317. 	Pop $R1
  318. 	Pop $9
  319. 	Pop $8
  320. 	Pop $7
  321. 	Pop $6
  322. 	Pop $5
  323. 	Pop $4
  324. 	Pop $3
  325. 	Pop $2
  326. 	Pop $1
  327. 	Pop $0
  328. 	Exch $R0
  329. FunctionEnd
  330. ;--------------------------------
  331. ;
  332. ; WordFind End
  333. ;
  334.  
  335. ;--------------------------------
  336. ;
  337. ; 설치 관련 디렉토리/레지스트리 정보
  338. ;
  339.  
  340. !define DEFAULT_SRC_DIR			"\NTREEV"
  341.  
  342. !define DESKTOP_ICON_NAME			"트릭스터"
  343. !ifdef _TEST_
  344. 	!define DESKTOP_SETUP_ICON_NAME	"트릭스터 테스트버전 환경설정"
  345. !else ;_TEST_
  346. 	!define DESKTOP_SETUP_ICON_NAME	"트릭스터 환경설정"
  347. !endif ;_TEST_
  348.  
  349. !define COMPANY_NAME			"Ntreev"
  350.  
  351. !ifdef _TEST_
  352. 	!define APP_NAME            "TricksterTest"
  353. !else ;_TEST_
  354. 	!define APP_NAME            "Trickster"
  355. !endif ;_TEST_
  356.  
  357. !define	RUN_FILE_NAME			"Splash.exe"
  358.  
  359. Name		"${APP_NAME}"
  360. OutFile		"${APP_NAME}_${VERSION_STR}.exe"
  361. InstallDir	"C:\NtreevSoft\Game\${APP_NAME}"
  362.  
  363. ;--------------------------------
  364. ;
  365. ; MUI setting
  366. ;
  367.  
  368. !define MUI_ABORTWARNING
  369. !define MUI_HEADERIMAGE
  370.  
  371. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP		"header.bmp"
  372.  
  373. !insertmacro MUI_DEFAULT MUI_ICON					"install.ico"
  374. !insertmacro MUI_DEFAULT MUI_UNICON					"uninstall.ico"
  375.  
  376.  
  377. ;--------------------------------
  378. ;
  379. ; pages
  380. ;
  381.  
  382. ; !insertmacro MUI_PAGE_LICENSE			"License_KOR.txt"
  383. ; !insertmacro MUI_PAGE_COMPONENTS								; 설치 항목 선택 페이지
  384.  
  385.  
  386.  
  387. !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "FindVista"
  388. !insertmacro MUI_PAGE_DIRECTORY
  389. !insertmacro MUI_PAGE_INSTFILES
  390. !insertmacro MUI_UNPAGE_CONFIRM
  391. !insertmacro MUI_UNPAGE_INSTFILES
  392.  
  393.  
  394. ;--------------------------------
  395. ;
  396. ; languages
  397. ;
  398.  
  399. !insertmacro MUI_LANGUAGE "Korean"
  400.  
  401.  
  402. ;--------------------------------
  403. ;
  404. ;Reserve Files
  405. ;
  406.  
  407.   ;These files should be inserted before other files in the data block
  408.   ;Keep these lines before any File command
  409.   ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
  410.  
  411.   !insertmacro MUI_RESERVEFILE_LANGDLL
  412.  
  413.  
  414. Function FindVista	
  415.  
  416. ;	ReadRegStr $0 HKLM "Software\Netmarble" "DefaultPath" 	
  417. ;	MessageBox MB_OK "Netmarble DefaultPath at: $0"
  418.  
  419. ;	StrLen $1 "$0" # = 6
  420.  
  421. ;	MessageBox MB_OK "Netmarble DefaultPath Len : $1"
  422.  
  423. ;	StrCmp $1 "0" 0 dircopy
  424. ;    MessageBox MB_YESNO "넷마블 게임을 설치할 기본 폴더를 설정하지 않았습니다.\n\n넷마블 웹 사이트(http://www.netmarble.net)에 방문하여 \n게임을 설치하실 것을 권장합니다.\n\n그래도 계속 진행하시겠습니까?" IDYES continue IDNO cancel
  425. ;    continue:
  426. ;    Goto Start    
  427. ;    cancel:
  428. ;    Abort
  429. ;    dircopy:
  430. ;    StrCpy InstallDir $0
  431.  
  432. ;Start:
  433.  
  434. 	Call GetWindowsVersion
  435.     Pop $R0    
  436.  
  437.     StrCmp $R0 "Vista" 0 +2
  438.     Goto Vista 
  439.     Goto Skip
  440.  
  441. Vista:
  442. ;	MessageBox MB_OK "Vista"
  443. 	${WordFind} "$INSTDIR" "Program Files" "E+1{" $R0
  444.  
  445. 	IfErrors notfound found
  446. 	found:
  447. 	MessageBox MB_OK "관리자 권한이 없을 때 문제가 발생할 수 있습니다."
  448. 	Goto Skip
  449.  
  450. 	notfound:
  451. ;	MessageBox MB_OK "Call Skip"
  452. 	Goto Skip
  453.  
  454. Skip:	
  455. ;	MessageBox MB_OK "Skip"	
  456.  
  457. FunctionEnd
  458.  
  459. ;--------------------------------
  460. ;
  461. ; Install section
  462. ; 파일 설치 / 레지스트리 정보 작성
  463. ;
  464.  
  465.  
  466. Section "Trickster" SecTrickster
  467.  
  468.     SectionIn RO    
  469.  
  470. 	CreateDirectory "${COMPANY_NAME}"
  471.  
  472.     SetOutPath "${COMPANY_NAME}"
  473.  
  474.     SetOutPath "$INSTDIR"								; 기본 설치 폴더 지정
  475.  
  476.     File /r "${SRC_DIR}\*.*"							; 파일 복사
  477.  
  478.     CreateDirectory "$INSTDIR\capture"
  479.  
  480.     WriteRegStr	HKLM "SOFTWARE\${COMPANY_NAME}\${APP_NAME}"	"Install_Dir"			"$INSTDIR"
  481.     WriteRegStr	HKLM "SOFTWARE\${COMPANY_NAME}\${APP_NAME}"	"Patcher"				"${RUN_FILE_NAME}"
  482.     WriteRegStr	HKLM "SOFTWARE\${COMPANY_NAME}\${APP_NAME}"	"UpdateVersion"			"${VERSION}"
  483.  
  484.     ; Uninstaller setting
  485.     WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "DisplayIcon"              "$INSTDIR\${RUN_FILE_NAME},0"
  486.     WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "DisplayName"              "${APP_NAME}"
  487.     WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "UninstallString"          "$INSTDIR\uninstall.exe"
  488.     WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "NoModify"                 1
  489.     WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" "NoRepair"                 1
  490.     WriteUninstaller "uninstall.exe"
  491.  
  492. ;    WriteRegStr   HKLM "SOFTWARE\${COMPANY_NAME}\${APP_NAME}"   "Language"              "${TRICKSTER_LANGUAGE}"    
  493. ;    WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANY_NAME}" "Install_Dir_Trickster"    "$INSTDIR" ; [설치 폴더] 예비용으로 중복 저장
  494.  
  495. SectionEnd
  496.  
  497.  
  498. ;--------------------------------
  499. ;
  500. ; optional section
  501. ; 바로가기 설치
  502. ; CreateShortCut	shortcut_name.lnk	targetfile_name		parameters("")	iconfile_name	icon_index_number - start_options(SW_SHOWNORMAL)
  503. ;
  504.  
  505. Section "Start Menu Shortcuts" SecMenu
  506.  
  507.     SectionIn RO
  508.  
  509.     CreateShortCut	"$DESKTOP\${DESKTOP_ICON_NAME}.lnk"				"http://www.trickster.co.kr"	""		"$INSTDIR\TricksterR.ico"		0
  510.     CreateShortCut	"$DESKTOP\${DESKTOP_SETUP_ICON_NAME}.lnk"		"$INSTDIR\Setup.exe"			""		"$INSTDIR\Setup.exe"			0
  511.  
  512. SectionEnd
  513.  
  514.  
  515. ;--------------------------------
  516. ;
  517. ; Install section Descriptions
  518. ;
  519. /*
  520. !ifdef _KOR_
  521.     !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  522.     !insertmacro MUI_DESCRIPTION_TEXT ${SecTrickster}   "트릭스터를 설치합니다."
  523.     !insertmacro MUI_DESCRIPTION_TEXT ${SecMenu}        "시작 메뉴에 트릭스터를 등록합니다."
  524.     !insertmacro MUI_FUNCTION_DESCRIPTION_END
  525. !endif ; _KOR_
  526. */
  527.  
  528. ;--------------------------------
  529. ;
  530. ; Uninstaller Section
  531. ;
  532.  
  533. Section "Uninstall"
  534.  
  535.     ; Registry
  536.     DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
  537.     DeleteRegKey HKLM "SOFTWARE\${COMPANY_NAME}\${APP_NAME}"
  538.  
  539. !ifdef _TEST_
  540. 	DeleteRegKey HKCU "Software\Ntreev\Trickster_NT_Test"
  541. !else ;_TEST_
  542. 	DeleteRegKey HKCU "Software\Ntreev\Trickster_NT"
  543. !endif ;_TEST_    
  544.  
  545. 	; file
  546.     RMDir /r "$INSTDIR\"
  547.  
  548.     ; shortcut
  549.     Delete "$DESKTOP\${DESKTOP_ICON_NAME}.lnk"
  550.     Delete "$DESKTOP\${DESKTOP_SETUP_ICON_NAME}.lnk"
  551.  
  552. SectionEnd