VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

製作安裝程式--NSIS

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> Windows 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期四 四月 22, 2004 2:45 pm    文章主題: 製作安裝程式--NSIS 引言回覆

製作安裝程式--NSIS

多語言支援,這該是 NSIS 2 最令人驚奇的功能了。
要購買一套數十萬的 InstallShield,還是免費的 Nullsoft
Installation System..?這款小巧精良的檔案包裝程式,就足
夠讓您安裝基本的需求。



下載點
1.down
http://tt.superdown.com/down/nsis20.exe
2.down
http://down2.superdown.com/down/nsis20.exe


NIS edit 2.0b5 簡繁中文化程式

軟體名稱:NIS edit
∥版本:2.0b5
∥分類:安裝程式
∥環境:Windows 95/98/NT4/2K 英/簡中/繁中
∥性質:免費軟體
∥首頁 http://hmne.sourceforge.net/

中文化作者:黃國書 (Kii Ali)
∥mailto:kiiali@cpatch.org
∥ICQ:5107476
∥網頁:http://cpatch.org/kiiali/



■本地化描述

0.自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助
」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用
上的誤解。
1.支援語言: 自動切換英文、繁體中文 (BIG5) 、簡體中文 (Gb3612) 。
2.本地化環境:在 Windows XP 2600 英文版 + 多國語言,使用 vc5
(ka 簡化版) 進行中文化。在繁體中文版,字型先使用「細明體9
」而非新細明體9 ,取得最大相容性。出品時再換成「新細明體9
」和「宋體9」。
3.測試環境:簡體中文、繁體中文 win98se 測試正常。顯示測試最
低基準為 810x600x256 small font 。
4.兩岸名詞校正:兩岸電腦專有名詞,使用陳寬達所做 BGconv
1.0.35 ,辭彙對照表及字碼對照表使用 Kii Ali v35 版本,
並另加人工修正,以期儘可能與大陸使用名詞一致。
5.名詞校正:我儘可能遵照既有微軟習慣。但微軟習慣上明顯不妥
者,如「新增 vs 加入」「移至 vs 前往」等。或是不夠專業
者,如「每秒幾畫格」,這些將予以修正。校正細節如下,亦
為 Kii Ali 的作品。
http://search.cpatch.org/download/patchutil/bgconv/cpatch_core14.zip

■軟體描述

NIS edit 2.0b5

如果你常常需要寫作 NSIS 的翻譯包裝腳本,你需要這個程式。
他當然不是最完美的程式,卻是少數能夠支援的 NSIS 2.0b5 等級的
寫作程式。他很適合於專業或是初學者,來學習 NSIS 的腳本寫作。

1.支援 MDI 介面模式,可以使用「多重實例」的方式執行程式。
2.多語言支援。當然囉,在 ka 的作用下,下一版就會正式
的塞進繁體中文、與簡體中文了。稍後會進入官方版本。
3.精靈:很少有寫腳本程式,能附上精靈,讓你即使什麼
nsis 都不懂,一樣可以寫一點像樣的「安裝」「解除安裝」程式。
4.可以測試,可以監督。比陽春的 makensisw.exe 好太多了。

當然他不是沒有缺點:

1.精靈只能支援單一語言安裝包的製作,而不能支援到
languageTable 或多語言安裝包的製作。但是要這個來自 Costa Rica
的作者,寫成多語言包裝,這實在是超過範圍,整個程式是一定要
全部重寫的。

但坦白說,這個精靈已經夠白痴,白痴到一般人可以
很容易上手了。其他的似乎都沒有這種精靈。

2.部分文字還沒辦法翻譯,我會再跟作者談一下這個問題。




■檔案下載

□原始檔案 (862KB)

http://search.cpatch.org/download/install/nisedit/source/nisedit20b5.zip

□中文化檔案 (864KB)

http://search.cpatch.org/download/install/nisedit/cnisedit20b5.exe

■中文化方法

NSIS 2.0b5 多語言安裝格式

1.直接執行 exe 檔案解壓縮到你安裝軟體的目錄下,「即可使用」
,無須任何英文版程式。軟體預設的安裝路徑為:

"c:\util\nisedit\"


■相關閱讀

NSIS 的作業系統判斷方式
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=165

NSIS 2.0b5 升級密技
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=125

NSIS 2.0bxxx 的諸多討論/消息/下載
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=32

NSIS 2.0 b3 升級密技
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=113

NSIS 2.0b1多語言腳本寫作密技 (無經驗者,建議先看這一篇)
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=54


■題外話

目前你可以很清楚的知道,NSIS 的專案,在 v1.98 之後,早已由
nullsoft 的手中,變成開放來源碼軟體。主控權則流向到這兩位以色列
人與荷蘭人。也早已不再只是拿來包裝 winamp 的玩具。當然,拿來包裝
winamp 的安裝檔案仍然再適合不過。

總體性 NSIS 開發 : kichik (以色列人)
Modern UI/網頁/語言檔案: Joost Verberg (荷蘭人)

該去他們在 winamp 的論壇拜訪一下。他們在 ICQ 上面,有時候熱情,
有時候真是讓人咬牙切齒。死老外。但總的來說,總還算是令人敬佩的傢伙。

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################


Ruey 在 星期五 四月 23, 2004 1:55 am 作了第 3 次修改
回頂端
檢視會員個人資料 發送私人訊息
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 2 樓

發表發表於: 星期四 四月 22, 2004 2:47 pm    文章主題: 引言回覆

來源:中文化軟體聯盟

[這篇文章最後由kiiali在 2003/10/23 15:57 編輯]


文章很長,請忍受一下。並附上 *.NSI 以便下載。請以關鍵字,搜尋 LangString 和第八大段,以及所有 LangString 的變數所放置的位置,那才是重點。

看到頭昏時,對不起,你家的事。

; NSIS: 結構化的 LangString 寫作
;
; 範例: NIS EDIT 2.0b3 中文化多語言包裝。
; 環境: NSIS 2.0b4, Modern UI 1.64 MAKENSIS.EXE 2003-05-09
;
; 新版的 (1021) 與 Modern UI 1.66 理論上也可以用。自己用死
; 了,自己要負責喔。如果你實在不想學多語言安裝,以及如何用
; LangString 「騙」 NSIS ,那麼這一段對你來說,就是垃圾,你
; 可以不看。如同 IC 所言,在硬碟毀掉之後還真是個新思維。
;
; 重點祇有這個字: LangString
; ──其 布局 / 放置變數 / 區段位置統整
;
; 當然許多人在質疑多語言需要或不需要。我不想多說什麼,你可
; 以看作品本身,讓使用人的「爽快程度」。當一個語言的統整關
; 卡突破時,剩下來的,你要加十個語言也沒有關係。你的程式控
; 制思路,會更加清晰。
;
; 回到原題。在 NSIS 2.0b1 之前,多語言之下需要寫「字串比
; 較」的一大堆巨集,如下
;
; StrCmp $LANGUAGE ${LANGID} "" +3;
;
; 而目前則以 LangString 或 LangStringUp 取代,簡潔許多。說來
; 簡單,但要把自己寫的舊巨集改換結構,那實在是有點痛苦。為
; 什麼要改?舊的巨集很方便,一路思路順暢,但多語言除錯時就
; 像大海撈針一樣。新的方式,會強制把 LangString 全部歸在同
; 一個位置。
;
; 有了 LangString ,可以騙到的東西,太多太多了。

; LangString 祇能用在對話顯示嗎?不能用在捷徑嗎?不能用在節
; 段名稱控制嗎?不能用在註冊表項,讓他隨著作業系統的不同而寫
; 入不同的數值嗎?
;
; 但是注意: 每一個 LangString 變數,前後不要附帶任何字串,
; 否則會使 NSIS 無法識別而出錯。
;
; 簡體描述部分,因為在 BIG5 編碼之下使用 GB2312 ,故
; 必定有亂碼,還請見諒。如果需要在網頁取得正確編碼,
; 請儲存為 BIG5 plain text ,再來處理。我會另外以
; attach file 的方式附在板上。
;
; 我沒有使用任何類似 GUI 的工具。推薦的就剛好是這個範圍本
; 身所包的,NIS EDIT 2.0b3 。
; http://search.cpatch.org/download/install/nisedit/cnisedit20b3.exe
; 如果還嫌太麻煩,Joost 的英文版 HTML 入門,只有一頁,建議先看。
;
; 記得,沒人強迫你要使用多語言,沒人強迫你要 Modern
; UI ,沒人強迫你要歡迎對話方塊。你一樣可以做出一點也
; 不花俏的,很傳統的安裝程式。不要在那裡廢話什麼 NSIS
; 愈做愈肥大。
;
; 這些都是自己決定的。
;
; ■相關閱讀
;
; NSIS 的作業系統判斷方式
; http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=165
;
; NSIS 2.0b4 升級密技
; http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=125
;
; NSIS 2.0bxxx 的諸多討論/消息/下載
; http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=32
;
; NSIS 2.0 b3 升級密技
; http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=113
;
; NSIS 2.0b1多語言腳本寫作密技 (無經驗者,建議先看這一篇)
; http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=54

;=======================================================
; ■1.定義變數、安裝目錄、輸出檔案、圖示
;=======================================================
; 只要在這裡寫好,其他的都按照定義的變數下去跑,就省力多了。
;
;==============================
; 1.1 版本號碼/名稱
;
!define VER_1 2 ;軟體版本號碼 1 ,如 Eudora 4.3.1.2 四位版本號碼
!define VER_2 0b3 ;軟體版本號碼 2
;!define VER_3 xxx ;軟體版本號碼 3
;!define VER_4 yyy ;軟體版本號碼 4
;!define VER_R 3 ;中文化同版本第幾更版
!define MUI_PRODUCT "NisEdit" ;程式名稱 (可使用大小寫,如果有空格,請用底線取代)
!define PROGFNHEADER "nisedit" ;中文化檔案名稱的主要部分 (全部小寫)
!define PROGMAINEXE "nisedit.exe" ;主程式執行檔案名稱 (含.exe)

;
;==============================
; 1.2 讀我檔案/輸出檔案
;
; 讀我顯示,包括 CHS/CHT/ENU 三個版本。如果你不需要製作
; 多語言中文化版本,只要考慮一個「讀我」即可。這個讀我,
; 通常拿來放「此中文化的描述檔案」,而非一般軟體的 readme 。
;
; 檔案命名: (全部小寫)。
; (cpatch) c + ${PROGFNHEADER} + 版本號碼 _(底線) 第幾中文化版本 . 副檔名
; (hanzify) ha _(底線) ${PROGFNHEADER} + 版本號碼 _(底線) 作者名 . 擴展名
;
;!define README "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
!define README_CHS "c${PROGFNHEADER}${VER_1}${VER_2}_gb.txt"
!define README_CHT "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
!define README_ENU "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
OUTFILE "c${PROGFNHEADER}${VER_1}${VER_2}.exe"

;==============================
; 1.3 預設安裝目錄 (尾端不加 \)
;
; 通常會出現在 "C:\Program Files\xxxx " 這種目錄。
; 也可以使用 ${AppPath} 在註冊表尋找舊版安裝目錄。
; 如果註冊表的安裝目錄 (尾端 \) 出現,不要使用它,以免發生錯誤。

;InstallDir "$PROGRAMFILES\${MUI_PRODUCT}"
;InstallDir "${AppPath}"
InstallDir "C:\util\nisedit"

;==============================
; 1.4 版權影像
;
; 只需要一個就夠 (一定要 bmp 格式),第二個是拿來花俏用的。
; 可以只使用一個,或完全不使用。

!define SPLASH1 "cnisedit.bmp"
;!define SPLASH2 "mdaeomon6_chs.bmp"

;==============================
; 1.5 安裝程式型態
;
; 中文化/直接安裝版/還是補綴補丁?安裝時出現在 caption 部分。
; 解除安裝時,也會出現在註冊表。

!define PATCHTYPE_ENU "(CN+TW) localized"
!define PATCHTYPE_CHT "(CN+TW) 中文化"
!define PATCHTYPE_CHS "(CN+TW) 笢恅趙"
;==============================
; 1.6 用於解除安裝的資訊
;
; 包含公司全稱/軟體功能概述。會塞在 Uninstall 註冊表內。

!define URLABOUT "http://espanol.geocities.com/ranametalcr/nisedt/index.htm#Features"
!define URLHELP "http://espanol.geocities.com/ranametalcr/nisedt/index.htm#Features"
!define URLUPDATE "http://espanol.geocities.com/ranametalcr/nisedt/index.htm#Download"
!define PUBLISHER "2003, Hector Mauricio Rodriguez Segura."
; 前面會自動依語言補上 Copyright (c) 或 版權所有 (c) ,因此後面只要接上年代和公司名稱。


;=======================================================
; ■2.使用者介面
;=======================================================
; 這一段的用途,在於強制覆寫 system.nsh 的英文預設設定值,
; 通常只有變更 「字型」「圖示」

;==============================
; 2.1 字型

; 安裝介面的字型預設大小 8,一定要改掉,否則在 win98 中文不好看。
; 如下。雙語言中文化,使用 "Tahoma" 即可。
; 不需要特別指定「新細明體」或「宋体」。

;!define MUI_FONT "MS Shell Dlg"
;!define MUI_FONTSIZE "8"
;!define MUI_FONT_HEADER "MS Sans Serif"
;!define MUI_FONTSIZE_HEADER "8"
;
; 上列: NSIS 字型「預設值」,下列: 字型「建議修改值」。
;
;!define MUI_FONT "Tahoma"
;!define MUI_FONTSIZE "9"
;!define MUI_FONT_HEADER "Tahoma"
;!define MUI_FONTSIZE_HEADER "9"

; 在 NSIS 2.0b4 2003-05-01 之後的版本,不需要再用上述
; 命令。已由 *.NSH 指定個別語言的字型名稱與大小。

;==============================
; 2.2 圖示

; 安裝程式圖示: 通常我使用主程式的圖示,另外用 VC 抽取出來。
; 解除安裝圖示: 為了讓 [控制台 | 新增/移除程式] 出現正確圖示,還是用同一個圖示。
; 有時候則使用它附的圖示 (因為看起來不錯)。
;!define MUI_ICON "${NSISDIR}\Contrib\Icons\modern-install.ico"
;!define MUI_UNICON "${NSISDIR}\Contrib\Icons\modern-uninstall.ico"
;
; 上列: NSIS 圖示「預設值」,風格有點像 InstallShield 6 ,也不錯。
; 下列: 自訂圖示,請指定正確名稱

!define MUI_ICON "${NSISDIR}\Contrib\icons\yi-box_install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\icons\yi-box_uninstall.ico"

;==============================
; 2.3 其他 (* 進階)

; 設定風格,這裡是自己可以搞鬼的地方。

!define MUI_UI "${NSISDIR}\Contrib\UIs\modern2.exe"
!define MUI_CHECKBITMAP "${NSISDIR}\Contrib\Icons\modern.bmp"
!define MUI_FONTstyle_HEADER "700"
!define MUI_FONT_TITLE "Verdana"
!define MUI_FONTSIZE_TITLE "12"
!define MUI_FONTstyle_TITLE "700"
!define MUI_INSTALLCOLORS "/windows"
!define MUI_PROGRESSBAR "smooth"
!define MUI_SPECIALINI "${NSISDIR}\Contrib\Modern UI\ioSpecial.ini"
!define MUI_SPECIALBITMAP "${NSISDIR}\Contrib\Icons\modern-wizard.bmp"
!define MUI_BGCOLOR "0xFFFFFF"


;=======================================================
; ■3.多語言系統
;=======================================================
; 載入 Modern UI\System.nsh 之用。

;==========================
; 3.1 前置相同變數,視需要而定。
;
; 通常出現在更換版本時,原腳本的變數校正。

!define MUI_VERSION "${VER_1}.${VER_2}"
;!define NAME "${MUI_PRODUCT}"

;顯示中文化標題,依 ENU/CHT/CHS 語言的不同。

CAPTION /LANG=1033 "${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_ENU}"
CAPTION /LANG=1028 "${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_CHT}"
CAPTION /LANG=2052 "${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_CHS}"


;==========================
; 3.2 載入 Modern UI 系統

!include "${NSISDIR}\Contrib\Modern UI\System.nsh"

;==========================
; 3.3 使用者介面
;
; 如果不要這些對話方塊,不做 define ,就不會出現。

!define MUI_WELCOMEPAGE ;歡迎頁面
!define MUI_LICENSEPAGE ;授權頁面 !define MUI_LICENSEPAGE_RADIOBUTTONS
!define MUI_COMPONENTSPAGE ;元件頁面
!define MUI_DIRECTORYPAGE ;目錄選擇
!define MUI_ABORTWARNING ;中止警告
!define MUI_UNINSTALLER ;解除安裝程式
!define MUI_UNCONFIRMPAGE ;不做確認頁面
; !define MUI_STARTMENUPAGE ;選擇開始功能表
!define MUI_FINISHPAGE ;出現完成頁面,執行程式和讀我。

!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_RUN "$INSTDIR\${PROGMAINEXE}"
!define MUI_FINISHPAGE_SHOWREADME "$(FILE_README)"


;==============================
; 3.4 各國語言
; 塞了 ENU/CHT/CHS 三個語言。你要 18 個語言全塞,也不反對。大小大概增加 20 kb 左右。
; 如果不是多語言中文化安裝,你可以全部 remark 掉。

!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "TradChinese"

;==============================
; 3.5 授權文字 (* 進階)
;
; 這些檔案沒有出現在 NSIS 預設包內。如果你手上沒有 license 檔案,
; 請直接 remark 掉。
; 這些東西會先被解壓縮出來。保留這幾行在任何 File 指令之前!)
; 只能用於 BZIP2 壓縮

LicenseData /LANG=${LANG_ENGLISH} "${NSISDIR}\Examples\Modern UI\license_enu.rtf"
LicenseData /LANG=${LANG_SIMPCHINESE} "${NSISDIR}\Examples\Modern UI\license_chs.rtf"
LicenseData /LANG=${LANG_TRADCHINESE} "${NSISDIR}\Examples\Modern UI\license_cht.rtf"

!insertmacro MUI_RESERVEFILE_LANGDLL

;=======================================================
; ■4.安裝程式,安裝開始的前置動作 (* 進階)
;=======================================================
; 如果不需要,你可以全部 remark。

Function .onInit

;==============================
; 4.1 顯示版權影像
;
; advsplash (NSIS 插件)。解壓縮到臨時目錄,顯示 splash ,然後刪掉。

SetOutPath $TEMP
File /oname=splash1.bmp ${SPLASH1}
; File /oname=splash2.bmp ${SPLASH2}

advsplash::show 1200 600 400 -1 $TEMP\splash1
; advsplash::show 1200 600 400 -1 $TEMP\splash2

Pop $0 ; $0 has '1' if the user closed the splash screen early,
; '0' if everything closed normal, and '-1' if some error occured.

Delete $TEMP\spltmp.exe
Delete $TEMP\splash1.bmp
; Delete $TEMP\splash2.bmp


;==============================
; 4.2 字型選擇 (* 進階)
;
; 只影響安裝程式的語言選擇 dialog ,因此不要使用中文字型名稱。
Push Verdana
Push 9

;==============================
; 4.3 語言選擇 (* 進階)
; 上面這一句,不要中文化。除非你想讓老外看到亂碼。
; 如果這一行完全不用,那就會直接跳該語言的選項。

!insertmacro MUI_LANGDLL_DISPLAY
LangDLL::LangDialog "Installer Language" "Please select a language."


Pop $LANGUAGE
StrCmp $LANGUAGE "cancel" 0 +2
Abort

;==============================
; 4.4 安裝前置動作 (修改註冊表) (* 進階)
;
; 視你需要,可以偷偷做一些動作。

; DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32"
; DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}"

;==============================
; 4.5 尋找舊版已安裝的目錄。 (* 進階)
;
; 如果 AppPath 讀出的尾端有 \ 符號,請不要直接使用於 INSTDIR 指令,以免發生錯誤。

; ReadRegStr $AppPath HKLM "SOFTWARE\Alt-N Technologies\MDaemon" "AppPath"

FunctionEnd


;=======================================================
; ■5.安裝程式,安裝完成後置動作 (* 進階)
;=======================================================
; 如果不需要,你可以全部 remark。

;==============================
; 5.1 函式定義開始
Function .onInstSuccess

;==============================
; 5.2 安裝完成後,執行 ExecShell
;
; 視個人需要而定,我只用在 Eudora 安裝而已。
; MessageBox MB_YESNO|MB_ICONQUESTION $(Str_Finish1) IDNO Nomapi
; ExecShell open '$INSTDIR\SWMAPI.EXE'
; Nomapi:

;==============================
; 5.3 安裝後,要求使用者讀取 README 檔案
; MessageBox MB_YESNO|MB_ICONQUESTION $(Str_Finish2) IDNO NoReadme
; ExecShell open $(FILE_README)
;NoReadme:

;==============================
; 5.4 函式定義結束
FunctionEnd



;=======================================================
; ■6.安裝的所有檔案
;=======================================================



;==============================
; 6.1 安裝類型

; 兩種應該很夠了。

InstType "$(desc_InstMin)"
InstType "$(desc_InstStd)"
InstType "$(desc_InstFul)"
;InstType "$(desc_InstCHT)"
;InstType "$(desc_InstCHS)"
;InstType "$(desc_InstENU)"

SetOverwrite on

;==============================
; 6.3 安裝的各個節段

; Section "${MUI_PRODUCT}" Sec${MUI_PRODUCT}
Section "$(S01)" SecS01
SectionIn 1 2 3

; 6.3.1 中文化的讀我
; 通常塞在安裝的主目錄。

SetOutPath $INSTDIR
File "${README_CHT}"
File "${README_CHS}"

; 6.3.2 中文化的程式檔案

; 通常不使用 *.* 型態,而個別指定,以免包裝錯誤。
; 常常是 *.DLL *.EXE *.AX 等類型。我都把這類放在 cht 為首的工作目錄。

SetOutPath $INSTDIR
File /r "pack\*.*"
SectionEnd


;==============================
; 6.4 加入到「開始選單」
;

;Section "Add shortcut to Start Menu" SecStartMenu
Section "$(S11)" SecS11
SectionIn 1 2 3
SetOutPath "$INSTDIR"

CreateDirectory "$SMPROGRAMS\${MUI_PRODUCT}"
; 有時候 CreateShortCut 會出問題,不如用這個動作
; 直接強制 installer 建立目錄。這樣比較賤。

; CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\Start ${MUI_PRODUCT}.lnk" "$INSTDIR\${PROGMAINEXE}"
CreateShortCut $(shtcut_SMlink01) $(shtcut_SMfile01)
; CreateShortCut $(shtcut_SMlink01) $(shtcut_SMfile02)
; CreateShortCut $(shtcut_SMlink01) $(shtcut_SMfile03)
; CreateShortCut $(shtcut_SMlink01) $(shtcut_SMfile04)

; CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\Uninstall ${MUI_PRODUCT}.lnk" "$INSTDIR\Uninstall.exe"
CreateShortCut $(shtcut_SMlink20) $(shtcut_SMfile20)
SectionEnd

;==============================
; 6.5 加入到「桌面」
;

;Section "Add shortcut to Desktop" SecDesktop
Section "$(S12)" SecS12
SectionIn 1 2 3
; CreateShortCut "$DESKTOP\${MUI_PRODUCT}.lnk" "$INSTDIR\${PROGMAINEXE}"
CreateShortCut $(shtcut_DTlink01) $(shtcut_DTfile01)
; CreateShortCut $(shtcut_DTlink02) $(shtcut_DTfile02)
SectionEnd

;==============================
; 6.6 加入到「快速啟動」
;
; 不是每個程式都要加入「快速啟動」列,視需要而定。
; 而且祇用在完整安裝。

;Section "Add shortcut to Quicklaunch" SecQuicklaunch
Section "$(S13)" SecS13
SectionIn 3
; CreateShortCut "$QUICKLAUNCH\${MUI_PRODUCT}.lnk" "$INSTDIR\${PROGMAINEXE}"
CreateShortCut $(shtcut_QLlink01) $(shtcut_QLfile01)
SectionEnd

;==============================
; 6.7 加入到「滑鼠右鍵」 (* 進階)
;
; 只用在 UltraEdit

;Section "Add to Right mouse button" SecRightMouse
;Section "$(S14)" SecS14
; SectionIn 1 2 3
; WriteRegStr HKLM "SOFTWARE\Classes\*\shellex\ContextMenuHandlers\UltraEdit-32" "" "{b5eedee0-c06e-11cf-8c56-444553540000}"
; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}" "" "UltraEdit-32"
; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32" "" "$INSTDIR\ue32ctmn.dll"
; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32" "ThreadingModel" "Apartment"
;SectionEnd

;=======================================================
; ■7.寫入解除安裝程式
;=======================================================
; 如果你嫌太難,可以不寫解除安裝程式,全部 remark 掉。

;==============================
; 7.1 節段開始


;Section "Create Uninstaller" SecCreateUninst
Section "$(S15)" SecS15
SectionIn 1 2 3

;==============================
; 7.2 寫入到「註冊表」(基礎)
;
; 一般只有寫下面這一段,指定安裝目錄。

WriteRegStr HKLM "SOFTWARE\${MUI_PRODUCT}" "Install_Dir" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\${MUI_PRODUCT}" "Installer Language" $LANGUAGE

;==============================
; 7.3 寫入到「註冊表」 (* 進階)
;
; 下面這段註冊表值,只是在 {控制台 | 新增移除程式] 花俏用的。
; 如果看不懂,可以全部不使用。
; 參考 http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=24&show=0
;
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"DisplayIcon" "$INSTDIR\${PROGMAINEXE}" ; 一般使用這個型態。只有 MDaemon 例外。
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"DisplayName" "${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_ENU}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"DisplayVersion" "${VER_1}.${VER_2}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"URLInfoAbout" "${URLABOUT}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"Contact" "kiiali@cpatch.org"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"HelpLink" "${URLHELP}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"URLUpdateInfo" "${URLUPDATE}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
"Readme" $(Reg_FILE_README)

;==============================
; 7.4 依照各種語言,自動寫入不同的註冊表值 (* 進階)
; 包括 ENU/CHT/CHS

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "$(Reg_comments)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "Copyright (c) ${Publisher}"

;------------------------------------------

;==============================
; 7.6 現在寫入「解除安裝程式」

; 寫入語言名稱到註冊表 (用於解除安裝程式)
WriteRegStr HKLM "Software\${MUI_PRODUCT}" "Installer Language" $LANGUAGE
WriteUninstaller "$INSTDIR\Uninstall.exe"

SectionEnd


;==============================
; 7.8 顯示「完成」標頭

;如果不想使用「完成」頁面,在這個巨集之後插入。

;!insertmacro MUI_SECTIONS_FINISHHEADER

;=======================================================
; ■8.描述功能
;=======================================================

;==============================
; 8.1 描述功能的巨集 (* 進階)
;
; 如果有描述,最好一個一個加入巨集。
; 這一段要在所有的 section 之後,否則會出現「變數名稱沒有找到」。
; 如果 MUI_FUNCTIONS_DESCRIPTION_BEGIN 拆成兩段,會變成重覆呼叫,而導致錯誤。

!insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecS01} $(DESC_SecS01)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecS02} $(DESC_SecS02)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecS03} $(DESC_SecS03)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecS04} $(DESC_SecS04)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecS05} $(DESC_SecS05)
!insertmacro MUI_DESCRIPTION_TEXT ${SecS11} $(DESC_SecS11)
!insertmacro MUI_DESCRIPTION_TEXT ${SecS12} $(DESC_SecS12)
!insertmacro MUI_DESCRIPTION_TEXT ${SecS13} $(DESC_SecS13)
!insertmacro MUI_DESCRIPTION_TEXT ${SecS14} $(DESC_SecS14)
!insertmacro MUI_DESCRIPTION_TEXT ${SecS15} $(DESC_SecS15)
!insertmacro MUI_FUNCTIONS_DESCRIPTION_END
;
;==============================
; 8.2 每個節段的描述文字,直接使用各國語言
;
; 這是讓滑鼠移動到安裝項目上時,自動出現的描述功能。
; 我使用 ENU/CHT/CHS 三個語言。如果嫌麻煩,可以只使用一個語言,甚至不使用描述。

; ●產品的相關說明 (解除安裝的註冊表項)
LangString Reg_comments ${LANG_ENGLISH} "Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali. HM NIS Edit is the best Open Source script editor for Nullsoft Scriptable Install System (NSIS). It's useful for experts and beginner in the creation of Setup programs with the NSIS. "
LangString Reg_comments ${LANG_TRADCHINESE} "中文 (中國大陸) 與 中文 (臺灣) ${MUI_PRODUCT} 本地化版本,由 Kii Ali 製作。HM NIS Edit 用於 Nullsoft Scriptable Install System (NSIS) ,是最佳的開放來源碼的腳本編輯器。它能用於專家與初學者,幫助你使用 NSIS 建立完整的安裝程式。"
LangString Reg_comments ${LANG_SIMPCHINESE} "笢恅 (笢弊湮翻) 迵 笢恅 (怢俜) ${MUI_PRODUCT} 掛華趙唳掛ㄛ蚕 Kii Ali 秶釬﹝HM NIS Edit 蚚衾﹛Nullsoft Scriptable Install System (NSIS)﹛ㄛ岆郔槽腔羲溫埭測鎢腔褐掛晤憮ん﹝坳夔蚚衾蚳模迵場悝氪ㄛ堆翑斕妏蚚 NSIS 斐膘俇淕腔假蚾最唗﹝"
; ●產品相關 readme (解除安裝的註冊表項)
LangString Reg_FILE_README ${LANG_ENGLISH} "file:///$INSTDIR\${README_ENU}"
LangString Reg_FILE_README ${LANG_TRADCHINESE} "file:///$INSTDIR\${README_CHT}"
LangString Reg_FILE_README ${LANG_SIMPCHINESE} "file:///$INSTDIR\${README_CHS}"
; ●產品相關 readme (安裝的最後一個視窗顯示)
LangString FILE_README ${LANG_ENGLISH} "$INSTDIR\${README_ENU}"
LangString FILE_README ${LANG_TRADCHINESE} "$INSTDIR\${README_CHT}"
LangString FILE_README ${LANG_SIMPCHINESE} "$INSTDIR\${README_CHS}"

; ●SM 開始選單/DT 桌面/QL 快速啟動,依照語言建立捷徑名稱
; 因為想在桌面上,看到「中文」捷徑名稱的人,實在太多了。所以祇好做了。
; link 後面當然都可以使用中文名稱。file 的部分,都是實體連結的檔案,當然不要使用中文名稱。
LangString shtcut_SMlink01 ${LANG_ENGLISH} "$SMPROGRAMS\${MUI_PRODUCT}\Start ${MUI_PRODUCT}.lnk"
; LangString shtcut_SMlink02 ${LANG_ENGLISH} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink03 ${LANG_ENGLISH} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink04 ${LANG_ENGLISH} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
LangString shtcut_SMlink20 ${LANG_ENGLISH} "$SMPROGRAMS\${MUI_PRODUCT}\Uninstall ${MUI_PRODUCT}.lnk"
LangString shtcut_DTlink01 ${LANG_ENGLISH} "$DESKTOP\${MUI_PRODUCT}.lnk"
; LangString shtcut_DTlink02 ${LANG_ENGLISH} "$DESKTOP\BlahBlahxxxx.lnk"
LangString shtcut_QLlink01 ${LANG_ENGLISH} "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
LangString shtcut_SMfile01 ${LANG_ENGLISH} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_SMfile02 ${LANG_ENGLISH} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile03 ${LANG_ENGLISH} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile04 ${LANG_ENGLISH} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_SMfile20 ${LANG_ENGLISH} "$INSTDIR\Uninstall.exe"
LangString shtcut_DTfile01 ${LANG_ENGLISH} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_DTfile02 ${LANG_ENGLISH} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_QLfile01 ${LANG_ENGLISH} "$INSTDIR\${PROGMAINEXE}"

LangString shtcut_SMlink01 ${LANG_TRADCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\開始 ${MUI_PRODUCT}.lnk"
; LangString shtcut_SMlink02 ${LANG_TRADCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink03 ${LANG_TRADCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink04 ${LANG_TRADCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
LangString shtcut_SMlink20 ${LANG_TRADCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\解除安裝 ${MUI_PRODUCT}.lnk"
LangString shtcut_DTlink01 ${LANG_TRADCHINESE} "$DESKTOP\${MUI_PRODUCT}.lnk"
; LangString shtcut_DTlink02 ${LANG_TRADCHINESE} "$DESKTOP\BlahBlahxxxx.lnk"
LangString shtcut_QLlink01 ${LANG_TRADCHINESE} "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
LangString shtcut_SMfile01 ${LANG_TRADCHINESE} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_SMfile02 ${LANG_TRADCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile03 ${LANG_TRADCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile04 ${LANG_TRADCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_SMfile20 ${LANG_TRADCHINESE} "$INSTDIR\Uninstall.exe"
LangString shtcut_DTfile01 ${LANG_TRADCHINESE} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_DTfile02 ${LANG_TRADCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_QLfile01 ${LANG_TRADCHINESE} "$INSTDIR\${PROGMAINEXE}"

LangString shtcut_SMlink01 ${LANG_SIMPCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\羲宎 ${MUI_PRODUCT}.lnk"
; LangString shtcut_SMlink02 ${LANG_SIMPCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink03 ${LANG_SIMPCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
; LangString shtcut_SMlink04 ${LANG_SIMPCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\BlahBlahxxxx.lnk"
LangString shtcut_SMlink20 ${LANG_SIMPCHINESE} "$SMPROGRAMS\${MUI_PRODUCT}\賤壺假蚾 ${MUI_PRODUCT}.lnk"
LangString shtcut_DTlink01 ${LANG_SIMPCHINESE} "$DESKTOP\${MUI_PRODUCT}.lnk"
; LangString shtcut_DTlink02 ${LANG_SIMPCHINESE} "$DESKTOP\BlahBlahxxxx.lnk"
LangString shtcut_QLlink01 ${LANG_SIMPCHINESE} "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
LangString shtcut_SMfile01 ${LANG_SIMPCHINESE} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_SMfile02 ${LANG_SIMPCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile03 ${LANG_SIMPCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
; LangString shtcut_SMfile04 ${LANG_SIMPCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_SMfile20 ${LANG_SIMPCHINESE} "$INSTDIR\Uninstall.exe"
LangString shtcut_DTfile01 ${LANG_SIMPCHINESE} "$INSTDIR\${PROGMAINEXE}"
; LangString shtcut_DTfile02 ${LANG_SIMPCHINESE} "$INSTDIR\BlahBlahxxxx.exe"
LangString shtcut_QLfile01 ${LANG_SIMPCHINESE} "$INSTDIR\${PROGMAINEXE}"


; ●安裝前後,對話方塊出現的字串。
; LangString Str_Begin1 ${LANG_ENGLISH} "blah..."
; LangString Str_Begin1 ${LANG_TRADCHINESE} "blah..."
; LangString Str_Begin1 ${LANG_SIMPCHINESE} "blah..."
; LangString Str_Finish1 ${LANG_ENGLISH} "Do you want to install ${NAME} as a default mailer? It will execute MAPI installer."
; LangString Str_Finish1 ${LANG_TRADCHINESE} "你想要安裝 ${NAME} 做為預設信件程式嗎?將執行外部 MAPI 安裝程式。"
; LangString Str_Finish1 ${LANG_SIMPCHINESE} "斕砑猁假蚾 ${NAME} 酕峈蘇珃宎最唗鎘ˋ蔚堍俴俋窒 MAPI 假蚾最唗﹝"
; LangString Str_Finish2 ${LANG_ENGLISH} "Setup has been completed successfully . Press [Yes] to continue README file." "${README_ENU}"
; LangString Str_Finish2 ${LANG_TRADCHINESE} "安裝已成功地完成。按下 [Yes] 繼續讀取 README 檔案。" "${README_CHT}"
; LangString Str_Finish2 ${LANG_SIMPCHINESE} "假蚾眒傖髡華俇傖﹝偌狟 [Yes] 樟哿黍 README 恅璃﹝" "${README_CHS}"


; ●安裝時的 Section
LangStringUp desc_InstMin ${LANG_ENGLISH} "Minimum Installation"
LangStringUp desc_InstStd ${LANG_ENGLISH} "Standard Installation"
LangStringUp desc_InstFul ${LANG_ENGLISH} "Full Installation"
LangStringUp desc_InstCHT ${LANG_ENGLISH} "TradChinese Optimal Installation"
LangStringUp desc_InstCHS ${LANG_ENGLISH} "SimpChinese Optimal Installation"
LangStringUp desc_InstENU ${LANG_ENGLISH} "English Optimal Installation"
LangString S01 ${LANG_ENGLISH} "${MUI_PRODUCT} Main Prog"
LangString S11 ${LANG_ENGLISH} "Add icon to Start Menu"
LangString S12 ${LANG_ENGLISH} "Add icon to Desktop"
LangString S13 ${LANG_ENGLISH} "Add icon to QuickLaunch"
LangString S14 ${LANG_ENGLISH} "Add function of mouse right-click"
LangString S15 ${LANG_ENGLISH} "Create Uninstaller"
LangString DESC_SecS01 ${LANG_ENGLISH} "Install ${MUI_PRODUCT} Main Prog. If this item not selected, it will be nothing to install."
LangString DESC_SecS11 ${LANG_ENGLISH} "Generally and periodically used program: we will use Start Menu to classify generally."
LangString DESC_SecS12 ${LANG_ENGLISH} "Frequently used program: we suggest put their link to Desktop. Begin to work instantly,no need to Start Menu."
LangString DESC_SecS13 ${LANG_ENGLISH} "Very frequently used program: we suggest put their link to QuickLaunch"
LangString DESC_SecS14 ${LANG_ENGLISH} "Build the context menu and file association, more faster to access your files."
LangString DESC_SecS15 ${LANG_ENGLISH} "If you would not want to keep use of this program, you need to build a Uninstaller."

LangStringUp desc_InstMin ${LANG_TRADCHINESE} "最小安裝"
LangStringUp desc_InstStd ${LANG_TRADCHINESE} "標準安裝"
LangStringUp desc_InstFul ${LANG_TRADCHINESE} "完整安裝"
LangStringUp desc_InstCHT ${LANG_TRADCHINESE} "繁體中文最適安裝"
LangStringUp desc_InstCHS ${LANG_TRADCHINESE} "簡體中文最適安裝"
LangStringUp desc_InstENU ${LANG_TRADCHINESE} "英文最適安裝"
LangString S01 ${LANG_TRADCHINESE} "${MUI_PRODUCT} 主程式"
LangString S11 ${LANG_TRADCHINESE} "加入圖示到開始功能表"
LangString S12 ${LANG_TRADCHINESE} "加入圖示到桌面"
LangString S13 ${LANG_TRADCHINESE} "加入圖示到快速啟動"
LangString S14 ${LANG_TRADCHINESE} "加入滑鼠右鍵功能"
LangString S15 ${LANG_TRADCHINESE} "建立解除安裝程式"
LangString DESC_SecS01 ${LANG_TRADCHINESE} "安裝 ${MUI_PRODUCT} 主程式。若這一項沒有選擇,就沒有程式可以安裝了。"
LangString DESC_SecS11 ${LANG_TRADCHINESE} "一般與偶爾使用的程式:通常都會使用開始功能表來進行分類。"
LangString DESC_SecS12 ${LANG_TRADCHINESE} "常用的程式:建議將其連結放在桌面,不必再到開始功能表尋找,馬上就可以開始工作。"
LangString DESC_SecS13 ${LANG_TRADCHINESE} "極常使用的程式:建議放在快速啟動。"
LangString DESC_SecS14 ${LANG_TRADCHINESE} "建立滑鼠右鍵的系絡選單與檔案關聯,更快速的存取你的檔案。"
LangString DESC_SecS15 ${LANG_TRADCHINESE} "萬一日後不想繼續使用此程式時,要預先建立解除安裝程式。"

LangStringUp desc_InstMin ${LANG_SIMPCHINESE} "郔苤假蚾"
LangStringUp desc_InstStd ${LANG_SIMPCHINESE} "梓袧假蚾"
LangStringUp desc_InstFul ${LANG_SIMPCHINESE} "俇淕假蚾"
LangStringUp desc_InstCHT ${LANG_SIMPCHINESE} "楛极笢恅郔巠假蚾"
LangStringUp desc_InstCHS ${LANG_SIMPCHINESE} "潠极笢恅郔巠假蚾"
LangStringUp desc_InstENU ${LANG_SIMPCHINESE} "荎恅郔巠假蚾"
LangString S01 ${LANG_SIMPCHINESE} "${MUI_PRODUCT} 翋最唗"
LangString S11 ${LANG_SIMPCHINESE} "氝樓芞梓善羲宎粕等"
LangString S12 ${LANG_SIMPCHINESE} "氝樓芞梓善袤醱"
LangString S13 ${LANG_SIMPCHINESE} "氝樓芞梓善辦厒ゐ雄"
LangString S14 ${LANG_SIMPCHINESE} "氝樓扷梓衵瑩髡夔"
LangString S15 ${LANG_SIMPCHINESE} "斐膘賤壺假蚾最唗"
LangString DESC_SecS01 ${LANG_SIMPCHINESE} "假蚾 ${MUI_PRODUCT} 翋最唗﹝譭瑲銨鎃棋▲見狡芤閨迣昐翾奿埶終偭芊"
LangString DESC_SecS11 ${LANG_SIMPCHINESE} "都寞迵髒嫌妏蚚腔最唗ㄩ籵都飲頗妏蚚羲宎粕等懂輛俴煦濬﹝"
LangString DESC_SecS12 ${LANG_SIMPCHINESE} "都蚚腔最唗ㄩ膘祜蔚[蟈諉溫婓袤醱ㄛ祥斛婬善羲宎粕等脤梑ㄛ鎮奻憩褫眕羲宎恄鞢"
LangString DESC_SecS13 ${LANG_SIMPCHINESE} "憤都妏蚚腔最唗ㄩ膘祜溫婓辦厒ゐ雄﹝"
LangString DESC_SecS14 ${LANG_SIMPCHINESE} "斐膘扷梓衵瑩腔炵釐粕等迵恅璃壽薊ㄛ載辦厒腔溼恀斕腔恅璃﹝"
LangString DESC_SecS15 ${LANG_SIMPCHINESE} "勀珨梣馦銨趧昐鑫墓繫佼昐藡悵皆肴反斐膘賤壺假蚾最唗﹝"

;=======================================================
; ■9.解除安裝程式,真正的動作
;=======================================================
; 這個部分,和前面的建立 CreateUninst ,意味不一樣喔。
; 前者: 把 uninstaller 程式做出來。
; 後者: 指定這個程式,要刪除那些檔案/目錄/註冊表項。

;==============================
; 9.1 節段開始

Section "Uninstall"

; 要移除掉解除安裝程式
Delete "$INSTDIR\Uninstall.exe"
; 移除檔案
RMDir /r "$INSTDIR"

; 移除開始功能表、桌面、快遞啟動等捷徑。
Delete "$SMPROGRAMS\${MUI_PRODUCT}\*.*"
Delete "$DESKTOP\${MUI_PRODUCT}.lnk"
Delete "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
RMDir /r "$SMPROGRAMS\${MUI_PRODUCT}"

; 移除使用過的目錄。
RMDir /r "$INSTDIR"

; 刪除 windows 註冊表之中的安裝路徑
DeleteRegKey HKLM SOFTWARE\${MUI_PRODUCT}

; 刪除 windows 註冊表的解除安裝
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"

; 刪除 uninstaller 使用的語言名稱 (* 進階)
DeleteRegvalue HKLM "Software\${MUI_PRODUCT}" "Installer Language"

;顯示「完成」標頭 (* 進階)
; !insertmacro MUI_UNFINISHHEADER

SectionEnd

;==============================
; 9.2 解除安裝程式,初始化函式動作 (* 進階)

Function un.onInit

;從註冊表取得語言名稱
ReadRegStr $LANGUAGE HKLM "Software\${MUI_PRODUCT}" "Installer Language"

FunctionEnd

;=======================================================
; ■eof 檔案結尾

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 3 樓

發表發表於: 星期五 四月 23, 2004 2:04 am    文章主題: 引言回覆

來源:∮Ω奧米加空間∮ dc
http://omega.idv.tw/kdb120/viewthread.php?threadid=1367&page=1#post4075

編寫 NSIS 的安裝腳本

前言:
如果你是第一次製作安裝程式,建議你使用 Setup Factory 或 CreateInstall
因為這兩個安裝程式是圖形介面非常的適合初學者使用。筆者一開始也不會使用
NSIS 寫腳本而是先從上面兩套軟體著手,了解安裝程式的流程與基礎才進而使用
Nullsoft Installation System 來製作安裝程式。

同一個程式用這三套軟體以最精簡的流程製作出來的安裝程式其大小如下

-----------------------------------------------
原始程式             248 KB
Setup Factory         488 KB
CreateInstall          156 KB
Nullsoft Installation System  134 KB
-----------------------------------------------

我本來是想直接用 CreateInstall 來製作安裝程式就好因為它是圖形介面簡單
作出來的檔案也很小。但是他作出來的安裝程式在繁體中文系統底下有一個BUG
讓我非放棄他不可。就是建立捷徑在「開始」功能表 -> 程式集 裡他會因為
BIG5 裡面的 "功" 含有 "\" 而建立成 「開始」-> 能表 -> 程式集 少了一個
字作出來的捷徑也不能用 >_<" 想辦法跟作者聯絡但是我英文實在很破.......
前言到此結束底下開始是教學了

==========================================================

本教學以 KYO 網友所著的 ShellInfoTip 為例子,因為它需要做到下列三項

1.註冊 DLL 檔案
2.註冊 REG 登錄檔案
3.在 WIN 路徑裡放置 STPlugin.ini

我先在這裡簡單的描述所需用到的參數在文章結尾處我會放上 ShellInfoTip.nsi
腳本檔案我有寫上詳細的註解,這裡以提出所需要的三項功能作為主要介紹。有
不知道不了解不清楚或我沒提及的參數,你可以查找 NSIS 的使用說明書他寫的
非常詳細。


1.註冊 DLL 檔案
RegDLL "$INSTDIR\ShellTip4Rar.dll"

其中 $INSTDIR 是代表你安裝的目錄
如:你是裝在 c:\emp\ShellInfoTip 底下,他的 $INSTDIR 就是這個目錄會隨著你的安裝路徑而變動。


2.註冊 REG 登錄檔案
WriteRegStr HKCR ".rar\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"
WriteRegStr HKCR ".exe\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"
WriteRegStr HKCR ".001\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"

WriteRegStr 是寫入類型為 REG_SZ 的數值
HKCR 是 HKEY_CLASSES_ROOT 的縮寫

原始程式所要註冊的登錄檔內容如下
-----------------------------------------------------------------------
REGEDIT4

[HKEY_CLASSES_ROOT\.rar\ShellEx]

[HKEY_CLASSES_ROOT\.rar\ShellEx\{00021500-0000-0000-c000-000000000046}]
@="{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"

[HKEY_CLASSES_ROOT\.exe\ShellEx]

[HKEY_CLASSES_ROOT\.exe\ShellEx\{00021500-0000-0000-c000-000000000046}]
@="{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"

[HKEY_CLASSES_ROOT\.001\ShellEx]

[HKEY_CLASSES_ROOT\.001\ShellEx\{00021500-0000-0000-c000-000000000046}]
@="{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"
-----------------------------------------------------------------------


3.在 WIN 路徑裡放置 STPlugin.ini
WriteINIStr "$WINDIR\STPlugin.ini" "Plugin" "Plugin1" "$INSTDIR\rar_txt.dll"

$WINDIR 是 Windows 系統的目錄
WriteINIStr 是寫入 INI 檔案,按照順序寫入 ini 的檔案名稱、區域名稱、變數名稱、數值。

原始程式的 STPlugin.ini 檔內容如下
-------------------------------------------------
[Plugin]
Plugin1=安裝路徑名\rar_txt.dll
-------------------------------------------------


三項主要的功能介紹就到此結束了底下開始是ShellInfoTip.nsi腳本檔案的內容


==========================================================
; ShellInfoTip.nsi
; 本安裝程式由 DC 編寫製作
; ∮Ω奧米加空間∮ http://omega.idv.tw/kdb120/
;

;宣告軟體名稱,後面可以利用 ${NAME} 調用這個名字
!define NAME "ShellInfoTip"

;設定字型
SetFont 新細明體 9

;使用 WindowsXP 視覺樣式
XPstyle on

;安裝視窗的標題名稱
Caption /LANG=1028 "安裝 Winrar Shell Info Tip 功能"

;替換預設的按鈕文字
MiscButtonText /LANG=1028 "< 上一步" "下一步 >" "取消" "關閉"

;替換預設的按鈕文字
InstallButtonText /LANG=1028 "安裝"

;替換預設的按鈕文字
UninstallButtonText /LANG=1028 "反安裝"

;替換反安裝程序的文字
DirText /LANG=1028 "歡迎您安裝 Shell Info Tip 這是個自由軟體版權歸原作者 KYO 所有。此安裝程式由∮Ω奧米加空間∮ 壇主 DC 提供製作。" "請選擇欲安裝 ${NAME} 的目錄:" "瀏覽..."

;替換反安裝程序的文字
UninstallText /LANG=1028 "現在將從你的系統中反安裝 ${NAME} 。如果你觸發了 ${NAME} 的功能 ShellTip4Rar.dll 動態連結檔必須重開機之後才可以被刪除。" "反安裝目錄:"

;替換反安裝程序標題的文字
UninstallCaption /LANG=1028 "反安裝 ${NAME}"

;替換反安裝程序的文字
DetailsButtonText /LANG=1028 "顯示詳細過程"

;替換反安裝按鈕的文字
UninstallButtonText /LANG=1028 "反安裝"

;反安裝程序顯示方式 預設是隱藏
ShowUninstDetails hide

;替換空間的文字
SpaceTexts /LANG=1028 "所需的空間 " "可用的空間 "

;這個安裝程式的名稱
Name "ShellInfoTip"

;輸出製作完成的安裝程式檔案
OutFile "ShellInfoTip.exe"

;預設的安裝程式目錄在 Program Files 裡
InstallDir $PROGRAMFILES\${NAME}


;底下開始是安裝程式所要執行的
Section "Install"

;設定輸出的路徑在安裝程式的目錄
SetOutPath $INSTDIR

;貼上你所要包裝在安裝程式裡的檔案
File "C:\Files\rar_txt.dll"
File "C:\Files\ShellTip4Rar.dll"

;註冊 DLL 檔案
RegDLL "$INSTDIR\ShellTip4Rar.dll"

;寫入欲註冊的值在 HKEY_CLASSES_ROOT 裡類型為 REG_SZ
WriteRegStr HKCR ".rar\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"
WriteRegStr HKCR ".exe\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"
WriteRegStr HKCR ".001\ShellEx\{00021500-0000-0000-c000-000000000046}" "" "{C34C25BE-9B2B-4A50-9D97-2658E0D8796B}"

;寫入 INI 檔
WriteINIStr "$WINDIR\STPlugin.ini" "Plugin" "Plugin1" "$INSTDIR\rar_txt.dll"

;在程式集裡建立反安裝程序的捷徑
CreateDirectory "$SMPROGRAMS\${NAME}"
CreateShortCut "$SMPROGRAMS\${NAME}\反安裝 ${NAME}.lnk" \
        "$INSTDIR\uninst.exe"

;寫入建立反安裝程序要跟上面所連結的檔名一樣
WriteUninstaller "$INSTDIR\uninst.exe"

SectionEnd
;安裝程式過程到此結束


;反安裝程序內容
Section "Uninstall"

;循環刪除檔案直到刪除資料夾
UnRegDLL "$INSTDIR\ShellTip4Rar.dll"
Delete "$INSTDIR\*.*"
Delete "$WINDIR\STPlugin.ini"
Delete "$SMPROGRAMS\${NAME}\*.*"
RMDir "$SMPROGRAMS\${NAME}"
RMDir "$INSTDIR"

;寫入欲刪除註冊的值
DeleteRegKey HKCR ".rar\ShellEx"
DeleteRegKey HKCR ".exe\ShellEx"
DeleteRegKey HKCR ".001\ShellEx"
SectionEnd
;反安裝程序過程到此結束

; eof

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
gene7299



註冊時間: 2016-02-24
文章: 1


第 4 樓

發表發表於: 星期三 二月 24, 2016 11:22 am    文章主題: 引言回覆

Very Happy

我在這邊也有看到NSIS教學~

http://seesawworld.blogspot.tw/2016/02/1-nsis.html

很方便,容易上手。
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> Windows 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作