·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 工具使用 >> NSIS 2.0b1多語言腳本寫作密技    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

NSIS 2.0b1多語言腳本寫作密技

作者: kiiali 来源:中文化联盟 时间:2003-10-29 点击:14310

NSIS 2.0b1多語言腳本寫作密技
kiiali

Crossposted
http://bbs.hanzify.org/bbs/cgi-bin/topic.cgi?forum=1&topic=2212&show=0
http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=54
找不到那裡可上載 zip 格式。如果你需要拿回去參考,請到上址,或是直接
按這裡下載。
http://leoboard.cpatch.org/usr/2/2_54.zip
; NSIS Modern User Interface version 1.62
;
; NSIS 多語言腳本寫作密技
;
; 這是 KA 實地用於 MDaemon 4.05 中文化的多語言安裝,
; 環境: NSIS 2.0b1, Modern UI 1.62
;
; 為便於閱讀,標明 (* 進階) 者,較為困難,可先略過。
; 幾乎是想辦法用上 Modern UI 1.62 新版的所有技巧了。
; 如果註解寫得太多,損害你的智商,請趕快寫信罵我。
;
; 簡體描述部分,因為在 BIG5 編碼之下使用 GB2312 ,故
; 必定有亂碼,還請見諒。如果需要在網頁取得正確編碼,
; 請儲存為 BIG5 plain text ,再來處理。我會另外以
; attach file 的方式附在板上。
;
; 我沒有使用任何類似 GUI 的工具。如果你之前已經有用
; 於 2.0a7 的 NSI 腳本,跨越版本時在 Modern UI 的寫
; 法,會花一些工夫。比如新世紀精華板有人用的
; magiclime ,現在只能用 advsplash 以外掛程式方式載入。
; 不用怕,我在裡面都寫了。如果還嫌太麻煩,Joost 的英
; 文版HTML 入門,只有一頁,建議先看。
;
; 記得,沒人強迫你要使用多語言,沒人強迫你要 Modern
; UI ,沒人強迫你要歡迎對話方塊。你一樣可以做出一點也
; 不花俏的,很傳統的安裝程式。不要在那裡廢話什麼 NSIS
; 愈做愈肥大。
;
; 這些都是自己決定的。
;


;=======================================================
; ■1.定義變數、安裝目錄、輸出檔案、圖示
;=======================================================
; 只要在這裡寫好,其他的都按照定義的變數下去跑,就省力多了。
;
;==============================
; 1.1 版本號碼/名稱
;
!define VER_1 4                            ;軟體版本號碼 1 ,如 Eudora 4.3.1.2 四位版本號碼
!define VER_2 05                           ;軟體版本號碼 2
;!define VER_3 xxx                         ;軟體版本號碼 3 (* 進階)
;!define VER_4 yyy                         ;軟體版本號碼 4 (* 進階)
;!define VER_R zzz                         ;中文化同版本第幾更版 (* 進階)
!define MUI_PRODUCT  "MDaemon"             ;程式名稱 (可使用大小寫)
!define PROGFNHEADER "mdaemon"             ;中文化檔案名稱的主要部分 (全部小寫)
!define PROGMAINEXE  "mdaemon.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:\MDaemon"
;==============================
; 1.4 版權影像
;
; 只需要一個就夠 (一定要 bmp 格式),第二個是拿來花俏用的。
; 可以只使用一個,或完全不使用。
!define SPLASH1 "mdaeomon4_cht.bmp"        
!define SPLASH2 "mdaeomon4_chs.bmp"
;==============================
; 1.5 安裝程式型態
;
; 中文化/直接安裝版/還是補綴補丁?安裝時出現在 caption 部分。
; 解除安裝時,也會出現在註冊表。
!define PATCHTYPE_ENU "(CN+TW) localized"
!define PATCHTYPE_CHT "(CN+TW) 中文化"
!define PATCHTYPE_CHS "(CN+TW) 笢恅趙"


;=======================================================
; ■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"
;==============================
; 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      "mdaemon4.ico"
!define MUI_UNICON    "mdaemon4.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_COMPONENTSPAGE          ;元件頁面
 !define MUI_DIRECTORYPAGE           ;目錄選擇
 !define MUI_ABORTWARNING            ;中止警告
 !define MUI_UNINSTALLER             ;解除安裝程式
 !define MUI_UNCONFIRMPAGE           ;不做確認頁面
; !define MUI_STARTMENUPAGE           ;選擇開始功能表
 !define MUI_FINISHPAGE              ;出現完成頁面,執行程式和讀我。
   !define MUI_FINISHPAGE_RUN "$INSTDIR\app\${PROGMAINEXE}"
   !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\${README_CHT}"
;   !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\$(README)"
;  LangString README     ${LANG_ENGLISH}     "${README_ENU}"
;  LangString README     ${LANG_TRADCHINESE} "${README_CHT}"
;  LangString README     ${LANG_SIMPCHINESE} "${README_CHS}"
;  上面這段 LangString 並不能套用在 SHOWREADME ,真奇怪。

 !insertmacro MUI_SYSTEM             ;使用者介面系統
;==============================
; 3.4 各國語言
 !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 顯示版權影像
;
; 舊版可使用 magiclime 做淡入淡出。不過這一版沒了,改成
; advsplash ,外掛方式。解壓縮到臨時目錄,顯示 splash ,然後刪掉。
; 注意: nsis 2.0a0 有 magicsplash 檔案。不過 2.0b1 居然又不見了。
  SetOutPath $TEMP
  File /oname=splash1.bmp ${SPLASH1}
  File /oname=splash2.bmp ${SPLASH2}
;   File /oname=spltmp.exe "${NSISDIR}\bin\magiclime.exe"
;   ExecWait '"$TEMP\spltmp.exe"  splash1.bmp'
;   ExecWait '"$TEMP\spltmp.exe"  splash2.bmp'
 advsplash::show 1000 600 400 -1 $TEMP\splash1
 advsplash::show 1000 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 語言 (* 進階)
;
; 塞了 ENU/CHT/CHS 三個語言。你要 18 個語言全塞,也不反對。大小大概增加 20 kb 左右。
; 如果不是多語言中文化安裝,你可以全部 remark 掉。
 !insertmacro MUI_LANGDLL_PUSH "English"
 !insertmacro MUI_LANGDLL_PUSH "SimpChinese"
 !insertmacro MUI_LANGDLL_PUSH "TradChinese"
 Push 3F ;3 = 語言數目, F = 變更字型
 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 安裝而已。
; ;------------------------------------------
; !macro MUI_INSTSUCCESS1 LANGID TEXT
;
;   StrCmp $LANGUAGE ${LANGID} "" +3
;   MessageBox MB_YESNO|MB_ICONQUESTION  "${TEXT}" IDNO Nomapi
;     ExecShell open '$INSTDIR\SWMAPI.EXE'
; !macroend
; ;------------------------------------------;
; 下列是 ENU/CHT/CHS 三個語言的動作。
;
; !insertmacro MUI_INSTSUCCESS1 1033 "Do you want to install  ${NAME} as a default mailer?  It will excute MAPI installer."
; !insertmacro MUI_INSTSUCCESS1 1028 "你想要安裝 ${NAME} 做為預設信件程式嗎?將執行外部 MAPI 安裝程式。"
; !insertmacro MUI_INSTSUCCESS1 2052 "斕砑猁假蚾 ${NAME} 酕峈蘇;蚘璃最唗鎘ˋ蔚堍俴俋窒 MAPI 假蚾最唗﹝"
; Nomapi:
;==============================
; 5.3 安裝後,要求使用者讀取 README 檔案
; ;------------------------------------------
; !macro MUI_INSTSUCCESS2 LANGID TEXT README
;   StrCmp $LANGUAGE ${LANGID} "" +3
;   MessageBox MB_YESNO|MB_ICONQUESTION  "${TEXT}" IDNO NoReadme
;   ExecShell open notepad '$INSTDIR\${README}'
; !macroend
; ;------------------------------------------
; 下列是 ENU/CHT/CHS 三個語言的動作。
; !insertmacro MUI_INSTSUCCESS2 1033 "Setup has been completed successfully .  Press [Yes] to continue README file." "${README_ENU}"
; !insertmacro MUI_INSTSUCCESS2 1028 "安裝已成功地完成。按下 [Yes] 繼續讀取 README 檔案。" "${README_CHT}"
; !insertmacro MUI_INSTSUCCESS2 2052 "假蚾眒傖髡華俇傖﹝偌狟 [Yes] 樟哿黍; README 恅璃﹝" "${README_CHS}"
; NoReadme:
;==============================
; 5.4 函式定義結束
FunctionEnd

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

;==============================
; 6.1 安裝類型
; 兩種應該很夠了。
InstType "Minimum"
InstType "Standard"
SetOverwrite on
;==============================
; 6.3 安裝的各個節段
Section "MDaemon" SecMDaemon
 SectionIn 1 2
; 6.3.1 中文化的讀我
; 通常塞在安裝的主目錄。
 SetOutPath $INSTDIR
       File "${README_CHT}"
       File "${README_CHS}"
; 6.3.2 中文化的程式檔案
; 通常不使用 *.* 型態,而個別指定,以免包裝錯誤。
; 常常是 *.DLL *.EXE *.AX 等類型。我都把這類放在 cht 為首的工作目錄。
 SetOutPath $INSTDIR\app
    File "cht\AccountPrune.exe"
    File "cht\CFILTER.EXE"
    File "cht\IMPORTNT.EXE"
    File "cht\ListPrune.exe"
    File "cht\MD3CONV.EXE"
    File "cht\MDAEMON.EXE"
    File "cht\MDCONFIG.EXE"
    File "cht\MDLAUNCH.EXE"
    File "cht\MDSTATS.EXE"
    File "cht\MDUSER.DLL"
    File "cht\MDUserLdap.dll"
    File "cht\MigrateUsers.exe"
    File "cht\ROBOEX32.DLL"
    File "cht\UninstallSurvey.exe"
    File "cht\UNWISE.EXE"
    File "cht\WCIMPORT.EXE"
    File "cht\XCEEDZIP.DLL"
; 6.3.3 中文化的文字檔案
;
; 通常是 (*.cnt, *.txt *.dat *.ini) 類型。
; 無語言區分者,仍放在 pack 為首的工作目錄。
; 有語言區分者,放在 text/cht 與 text/chs 為首的工作目錄。
; 6.3.3.1 如果有舊版,會有一些「一定」要刪除的舊版檔案。然後再由安裝程式補上新版。
 SetOutPath $INSTDIR\app
    Delete "$INSTDIR\app\HELP.DAT"
    Delete "$INSTDIR\app\MDAEMON.CNT"
    Delete "$INSTDIR\app\acctinfo.dat"
    File "pack405\app\CFILTER.INI"
    File "pack405\app\MDSTATS.INI"
; 6.3.3.2 如果有舊版,也會有一些「不能刪除」的舊版檔案。
;  這段是使用在 UltraEdit ,把 windows 目錄的 INI 移動過來。MDaemon 不用這一段。
;
;  IfFileExists "$WINDIR\UEdit32.ini" DO1 DO2
;    DO1: ;把 $WINDIR 的移動到安裝目錄
;  Rename "$WINDIR\UEdit32.ini" "$INSTDIR\Uedit32.ini"
;    DO2: ;如果沒有,則寫入一個假的 INI,以修正 HTMLTIDY 的功能。如果安裝目錄已有,則不蓋掉。
 SetOverwrite off  ;停用強制覆寫
    File "pack405\app\MDAEMON.INI"
 SetOverwrite on  ;判斷完畢之後,啟用強制覆寫
;  6.3.3.3 搞一些好玩的,比如塞入自動使軟體註冊的資料
;  正式版本就不要這樣做,以免太囂張,反而不好。
;
;  WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "Name" "My_reg_Name"
;  WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "Company" "My_reg_Company"
;  WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "4XKey" "GDPFFMF-QAWLYFJ-XQDIYAO"

; 6.3.3.4 補上新版檔案
;
; 依照各種語言,自動執行,分配正確的檔案。使用者不必再選擇。
; 先寫一個巨集,自動判斷作業系統語言。 1033 enu, 1028 cht, 2052 chs
 ;------------------------------------------
 !macro MUI_COPYTEXTFILE LANGID ACTION_COPYTEXTFILE
   StrCmp $LANGUAGE ${LANGID} "" +3
   ${ACTION_COPYTEXTFILE}
 !macroend
;  !insertmacro MUI_COPYTEXTFILE 1033 'File "text405\enu\Help.dat"'
;  !insertmacro MUI_COPYTEXTFILE 1033 'File "text405\enu\MDaemon.cnt"'
;
;  英文的不動,只做為對照組。注意單引號和雙引號。
;  這種腳本寫法其實蠻笨的,應該有更好的方法。
 !insertmacro MUI_COPYTEXTFILE 1028 'File "text405\cht\Help.dat"'
 !insertmacro MUI_COPYTEXTFILE 1028 'File "text405\cht\MDaemon.cnt"'
 !insertmacro MUI_COPYTEXTFILE 2052 'File "text405\chs\Help.dat"'
 !insertmacro MUI_COPYTEXTFILE 2052 'File "text405\chs\MDaemon.cnt"'
; 6.3.4 非中文化檔案 (不用修改的部分)
; 可使用 *.* 這種型態。 我都把這類放在 pack 為首的工作目錄。
 SetOutPath $INSTDIR\app
    File "pack405\app\AccountPrune.txt"
    File "pack405\app\bwcc32.dll"
    File "pack405\app\ADDUSER.SMP"
    File "pack405\app\CFAPP.ICO"
    File "pack405\app\CFILTER.DLL"
    File "pack405\app\DEDUPE.EXE"
    File "pack405\app\DIRREORG.EXE"
    File "pack405\app\DomainPOP.dsc"
    File "pack405\app\EDITUSER.SMP"
    File "pack405\app\FILELIST.DAT"
    File "pack405\app\INETWH32.DLL"
    File "pack405\app\INSTALL.LOG"
    File "pack405\app\MailboxSize.exe"
    File "pack405\app\MailboxSize.txt"
    File "pack405\app\MDAEMON.DSC"
    File "pack405\app\MDAEMON.HLP"
    File "pack405\app\NTUTIL.DLL"
    File "pack405\app\ULREPAIR.EXE"
    File "pack405\app\WISECHCK.EXE"
    File "pack405\app\WISEUPDT.EXE"
    File "pack405\app\WP2WC.EXE"
    File "pack405\app\XCDSFX32.BIN"

 SetOutPath $INSTDIR\cgi
    File "pack405\cgi\*.*"
SectionEnd
Section "MDaemon Docs" SecMDaemonDocs
 SectionIn 2
 SetOutPath $INSTDIR\docs
    File "pack405\docs\*.*"
 SetOutPath $INSTDIR\docs\api
    File "pack405\docs\api\*.*"
SectionEnd
Section "World Client" SecWorldClient
 SectionIn 2
 SetOutPath $INSTDIR\wcstandard
    File "pack405\wcstandard\*.*"
    ; 底下為需要中文化的部分
    File "cht\wcstandard\WCStandard.exe"
    File "cht\wcstandard\WorldClient.dll"
    File "cht\wcstandard\XceedZip.dll"
 SetOutPath $INSTDIR\wcstandard\html
    File "pack405\wcstandard\html\*.*"
 SetOutPath $INSTDIR\wcstandard\html\help
    File "pack405\wcstandard\html\help\*.*"
 SetOutPath $INSTDIR\wcstandard\templates
    File "pack405\wcstandard\templates\*.*"
SectionEnd
Section "Web Config" SecWebConfig
 SectionIn 2
 SetOutPath $INSTDIR\webconfig
    File "pack405\webconfig\*.*"
    ; 底下為需要中文化的部分
    File "cht\webconfig\WebConfig.exe"
 SetOutPath $INSTDIR\webconfig\html
    File "pack405\webconfig\html\*.*"
 SetOutPath $INSTDIR\webconfig\templates
    File "pack405\webconfig\templates\*.*"
SectionEnd
;==============================
; 6.4 加入到「開始選單」
;
Section "Add shortcut to Start Menu" SecStartMenu
 SectionIn 1 2
 SetOutPath "$INSTDIR"
 CreateDirectory "$SMPROGRAMS\${MUI_PRODUCT}"
; 有時候 CreateShortCut 會出問題,不如用這個動作
; 直接強制 installer 建立目錄。這樣比較賤。
 CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\MDaemon.lnk" \
                "$INSTDIR\app\mdaemon.exe"
 CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\MDConfig.lnk" \
                "$INSTDIR\app\MDConfig.exe"
 CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\Uninstall ${MUI_PRODUCT}.lnk" \
                "$INSTDIR\Uninstall.exe"
SectionEnd
;==============================
; 6.5 加入到「快速啟動」
;
; 不是每個程式都要加入「快速啟動」列,視需要而定。
;
;Section "Add shortcut to Quicklaunch" SecQuicklaunch
;  SectionIn 1 2
;  CreateShortCut "$QUICKLAUNCH\${MUI_PRODUCT}.lnk" \
;                 "$INSTDIR\app\${PROGMAINEXE}"
;SectionEnd
;==============================
; 6.6 加入到「桌面」
;
Section "Add shortcut to Desktop" SecDesktop
 SectionIn 1 2
 CreateShortCut "$DESKTOP\${MUI_PRODUCT}.lnk" \
                "$INSTDIR\app\${PROGMAINEXE}"
SectionEnd
;==============================
; 6.6 加入到「滑鼠右鍵」 (* 進階)
;
; 只用在 UltraEdit
;Section "Add to Right mouse button" SecRightMouse
;  SectionIn 1 2
;  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
 SectionIn 1 2
;==============================
; 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\app\${PROGMAINEXE}"
;   "DisplayIcon" "$INSTDIR\${PROGMAINEXE}"       ; 一般使用這個型態。只有 MDaemon 例外。
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "DisplayName" "${MUI_PRODUCT} ${VER_1}.${VER_2} ${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" "http://www.altn.com/Products/Default.htm?product_id=MDaemon"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "Contact" "kiiali@cpatch.org"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "HelpLink" "http://www.altn.com/Support/Default.htm?product_id=MDaemon"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "URLUpdateInfo" "http://www.altn.com/Download/Default.htm"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "Readme" "$INSTDIR\${README_CHT}"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "Comments" "Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali, for Mailer Daemon with win32 plateform."
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "Publisher" "Copyright (c) 2002, Alt-N Technology."
;==============================
; 7.4 依照各種語言,自動寫入不同的註冊表值 (* 進階)
; 包括 ENU/CHT/CHS
 ;------------------------------------------
 !macro MUI_REGMUI1 LANGID TEXT
   StrCmp $LANGUAGE ${LANGID} "" +3
   ${TEXT}
 !macroend
 !insertmacro MUI_REGMUI1 1033 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali, for Mailer Daemon with win32 plateform." '
 !insertmacro MUI_REGMUI1 1028 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "中文 (中國大陸) 與 中文 (臺灣) ${MUI_PRODUCT} 本地化版本,由  Kii Ali 製作,用於 win32 平臺架設個人或公司的信件伺服器。" '
 !insertmacro MUI_REGMUI1 2052 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "笢恅 (笢弊湮翻) 迵 笢恅 (怢俜) ${MUI_PRODUCT} 掛華趙唳掛ㄛ蚕  Kii Ali 秶釬ㄛ蚚衾 win32 ;怢殤扢跺;麼鼠侗腔蚘璃督昢;﹝" '
;==============================
; 7.5 依照各種語言,自動寫入不同的註冊表值 (* 進階)
; 包括 ENU/CHT/CHS
 ;------------------------------------------
 !macro MUI_REGMUI2 LANGID TEXT
   StrCmp $LANGUAGE ${LANGID} "" +3
   ${TEXT}
 !macroend
 !insertmacro MUI_REGMUI2 1033 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "Copyright (c) 2002, Alt-N Technology." '
 !insertmacro MUI_REGMUI2 1028 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "版權所有 (c) 2002, Alt-N Technology. " '
 !insertmacro MUI_REGMUI2 2052 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "唳;垀衄 (c) 2002, Alt-N Technology." '
 ;------------------------------------------
;==============================
; 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 ${SecMDaemon}      $(DESC_SecMDaemon)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecMDaemonDocs}  $(DESC_SecMDaemonDocs)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecWorldClient}  $(DESC_SecWorldClient)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecWebConfig}    $(DESC_SecWebConfig)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu}    $(DESC_SecStartMenu)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch}  $(DESC_SecQuicklaunch)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop}      $(DESC_SecDesktop)
 !insertmacro MUI_DESCRIPTION_TEXT ${SecCreateUninst} $(DESC_SecCreateUninst)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecRightMouse}   $(DESC_SecRightMouse)
!insertmacro MUI_FUNCTIONS_DESCRIPTION_END
;
;==============================
; 8.2 每個節段的描述文字,直接使用各國語言 (* 進階)
;
; 這是讓滑鼠移動到安裝項目上時,自動出現的描述功能。
; 我使用 ENU/CHT/CHS 三個語言。如果嫌麻煩,可以只使用一個語言,甚至不使用描述。
 LangString DESC_SecMDaemon      ${LANG_ENGLISH}     "MDaemon Server Main Prog"
 LangString DESC_SecMDaemonDocs  ${LANG_ENGLISH}     "Related Documents, manuals"
 LangString DESC_SecWorldClient  ${LANG_ENGLISH}     "Server: reading your emails on browser"
 LangString DESC_SecWebConfig    ${LANG_ENGLISH}     "config server on browser"
 LangString DESC_SecStartMenu    ${LANG_ENGLISH}     "Add icon to Start Menu"
 LangString DESC_SecQuicklaunch  ${LANG_ENGLISH}     "Add icon to QuickLaunch"
 LangString DESC_SecDesktop      ${LANG_ENGLISH}     "Add icon to Desktop"
 LangString DESC_SecRightMouse   ${LANG_ENGLISH}     "Add function of mouse right-click"
 LangString DESC_SecCreateUninst ${LANG_ENGLISH}     "Create Uninstaller"
 LangString DESC_SecMDaemon      ${LANG_TRADCHINESE} "MDaemon 伺服器主程式"
 LangString DESC_SecMDaemonDocs  ${LANG_TRADCHINESE} "相關的文件、手冊"
 LangString DESC_SecWorldClient  ${LANG_TRADCHINESE} "瀏覽器網頁讀取信件的伺服器"
 LangString DESC_SecWebConfig    ${LANG_TRADCHINESE} "在瀏覽器組態伺服器"
 LangString DESC_SecStartMenu    ${LANG_TRADCHINESE} "加入圖示到開始功能表"
 LangString DESC_SecQuicklaunch  ${LANG_TRADCHINESE} "加入圖示到快速啟動列"
 LangString DESC_SecDesktop      ${LANG_TRADCHINESE} "加入圖示到桌面"
 LangString DESC_SecRightMouse   ${LANG_TRADCHINESE} "加入滑鼠右鍵功能"
 LangString DESC_SecCreateUninst ${LANG_TRADCHINESE} "建立解除安裝程式"
 LangString DESC_SecMDaemon      ${LANG_SIMPCHINESE} "MDaemon 督昢;翋最唗"
 LangString DESC_SecMDaemonDocs  ${LANG_SIMPCHINESE} "眈壽腔恅璃﹜忒聊"
 LangString DESC_SecWorldClient  ${LANG_SIMPCHINESE} "銡擬;厙珜黍;蚘璃腔督昢;"
 LangString DESC_SecWebConfig    ${LANG_SIMPCHINESE} "婓銡擬;饜离督昢;"
 LangString DESC_SecStartMenu    ${LANG_SIMPCHINESE} "氝樓芞梓善※羲宎§粕等"
 LangString DESC_SecQuicklaunch  ${LANG_SIMPCHINESE} "氝樓芞梓善辦厒;雄蹈"
 LangString DESC_SecDesktop      ${LANG_SIMPCHINESE} "氝樓芞梓善袤醱"
 LangString DESC_SecRightMouse   ${LANG_SIMPCHINESE} "氝樓扷梓衵瑩髡夔"
 LangString DESC_SecCreateUninst ${LANG_SIMPCHINESE} "斐膘賤壺假蚾最唗"


;=======================================================
; ■9.解除安裝程式,真正的動作
;=======================================================
; 這個部分,和前面的建立 CreateUninst ,意味不一樣喔。
; 前者: 把 uninstaller 程式做出來。
; 後者: 指定這個程式,要刪除那些檔案/目錄/註冊表項。
;==============================
; 9.1 節段開始
Section "Uninstall"
; 要移除掉解除安裝程式
 Delete "$INSTDIR\Uninstall.exe"
 ; 移除檔案
 Delete "$INSTDIR\App\*.*"
 Delete "$INSTDIR\Logs\*.*"
 Delete "$INSTDIR\docs\api\CreateUser\*.*"
 Delete "$INSTDIR\docs\api\IterateUsers\*.*"
 Delete "$INSTDIR\docs\api\Sample COM\MDUserEdit\*.*"
 Delete "$INSTDIR\docs\api\Sample COM\*.*"
 Delete "$INSTDIR\docs\api\*.*"
 Delete "$INSTDIR\docs\*.*"
 Delete "$INSTDIR\cgi\*.*"
 Delete "$INSTDIR\ARCHIVES\*.*"
 Delete "$INSTDIR\BACKUP\*.*"
 Delete "$INSTDIR\BADMSGS\*.*"
 Delete "$INSTDIR\CFILTER\*.*"
 Delete "$INSTDIR\DIGESTS\*.*"
 Delete "$INSTDIR\GATEWAYS\*.*"
 Delete "$INSTDIR\LOCALQ\LNDOMAIN\*.*"
 Delete "$INSTDIR\LOCALQ\*.*"
 Delete "$INSTDIR\LOGS\*.*"
 Delete "$INSTDIR\PUBLIC~1\*.*"
 Delete "$INSTDIR\RAWFILES\*.*"
 Delete "$INSTDIR\REMOTEQ\RETRY\*.*"
 Delete "$INSTDIR\REMOTEQ\*.*"
 Delete "$INSTDIR\SMTPIN\*.*"
 Delete "$INSTDIR\WCstandard\HTML\help\*.*"
 Delete "$INSTDIR\WCstandard\HTML\*.*"
 Delete "$INSTDIR\WCstandard\Temp\*.*"
 Delete "$INSTDIR\WCstandard\Templates\*.*"
 Delete "$INSTDIR\WCstandard\*.*"
 Delete "$INSTDIR\webconfig\HTML\*.*"
 Delete "$INSTDIR\webconfig\Temp\*.*"
 Delete "$INSTDIR\webconfig\Templates\*.*"
 Delete "$INSTDIR\webconfig\*.*"
 Delete "$INSTDIR\*.*"
 ; 移除開始功能表、桌面、快遞啟動等捷徑。
 Delete "$SMPROGRAMS\${MUI_PRODUCT}\*.*"
 Delete "$DESKTOP\${MUI_PRODUCT}.lnk"
 Delete "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
 RMDir "$SMPROGRAMS\${MUI_PRODUCT}"
 ; 移除使用過的目錄。
 RMDir "$INSTDIR\App"
 RMDir "$INSTDIR\Logs"
 RMDir "$INSTDIR\docs\api\CreateUser"
 RMDir "$INSTDIR\docs\api\IterateUsers"
 RMDir "$INSTDIR\docs\api\Sample COM\MDUserEdit"
 RMDir "$INSTDIR\docs\api\Sample COM"
 RMDir "$INSTDIR\docs\api"
 RMDir "$INSTDIR\docs"
 RMDir "$INSTDIR\cgi"
 RMDir "$INSTDIR\ARCHIVES"
 RMDir "$INSTDIR\BACKUP"
 RMDir "$INSTDIR\BADMSGS"
 RMDir "$INSTDIR\CFILTER"
 RMDir "$INSTDIR\DIGESTS"
 RMDir "$INSTDIR\GATEWAYS"
 RMDir "$INSTDIR\LOCALQ\LNDOMAIN"
 RMDir "$INSTDIR\LOCALQ"
 RMDir "$INSTDIR\LOGS"
 RMDir "$INSTDIR\PUBLIC~1"
 RMDir "$INSTDIR\RAWFILES"
 RMDir "$INSTDIR\REMOTEQ\RETRY"
 RMDir "$INSTDIR\REMOTEQ"
 RMDir "$INSTDIR\SMTPIN"
 RMDir "$INSTDIR\WCstandard\HTML\help"
 RMDir "$INSTDIR\WCstandard\HTML"
 RMDir "$INSTDIR\WCstandard\Temp"
 RMDir "$INSTDIR\WCstandard\Templates"
 RMDir "$INSTDIR\WCstandard"
 RMDir "$INSTDIR\webconfig\HTML"
 RMDir "$INSTDIR\webconfig\Temp"
 RMDir "$INSTDIR\webconfig\Templates"
 RMDir "$INSTDIR\webconfig"
 RMDir "$INSTDIR"
 ; 刪除 windows 註冊表之中的安裝路徑
 DeleteRegKey HKLM SOFTWARE\${MUI_PRODUCT}
 ; 刪除 windows 註冊表的解除安裝
 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"
 ; 刪除 uninstaller 使用的語言名稱 (* 進階)
 DeleteReg&#118alue 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 檔案結尾

原帖参见:http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=29&topic=31&show=0

 

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): NSIS 脚本 安装 多语言

·上一篇: 点睛资源替换器修正版 ·下一篇: 全方位掌握 NSIS 的使用

· 版权申明: 本文引自《中文化联盟》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《中文化联盟》[ 作者: kiiali],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号