發新話題

《資訊分享》NSIS 2.0bxxx 的諸多討論/消息/下載

《資訊分享》NSIS 2.0bxxx 的諸多討論/消息/下載

中文化技術: 軟體封裝(測試)

NSIS 2 首頁 訪客無法瀏覽此圖片或連結,請先 註冊登入會員

不曉得您會不會也在等 NSIS ?等到真的進了 NSIS 的討論群一看,哇,這麼多東西和功能?NSIS 一直不是商業軟體,但即使兩三天更新一次,也發覺東西愈來愈多,功能也隨著我們這些使用者的要求,愈加愈多。

語言:
1.繁體中文
;Language: 'Chinese (Traditional)' (1028)
2.簡體中文
;Language: 'Chinese (Simplified)' (2052)

範本:
1.NLF (國家語言訊息)
2.NSH (Moderen UI 的部分)

哎,好像都是我從 matini 那裡搶來的。

如果你吃飽閒閒,可以看這裡。
訪客無法瀏覽此圖片或連結,請先 註冊登入會員

如果您還搞不清楚什麼是 NSIS 2,要看中文概述,在這裡。
訪客無法瀏覽此圖片或連結,請先 註冊登入會員

(for hoher)
Nullsoft Installation System 2.0 beta0/install/nsis/source/nsis20b0.zip
正確的多語言支援,這該是 NSIS 2 最令人驚奇的功能了。
要購買一套數十萬的 InstallShield,還是免費的 NullsoftInstallation System..?這款小巧精良的檔案包裝程式,就足夠讓您安裝基本的需求。


多語言腳本寫作密技
Crossposted
訪客無法瀏覽此圖片或連結,請先 註冊登入會員
訪客無法瀏覽此圖片或連結,請先 註冊登入會員
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:angDialog "Installer Language" "lease 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

TOP

;=======================================================
; ■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 寫入到「註冊表」 (* 進階)
;
; 下面這段註冊表值,只是在 {控制台 | 新增移除程式] 花俏用的。
; 如果看不懂,可以全部不使用。
; 參考  訪客無法瀏覽此圖片或連結,請先 註冊登入會員
;
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.asp?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.asp?product_id=MDaemon"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  "URLUpdateInfo" "http://www.altn.com/Download/Default.asp"
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 使用的語言名稱 (* 進階)
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 檔案結尾




TOP

解除安裝時,「註冊表」寫法

為什麼別人的中文化安裝完,就有 "Support Information"?

[glow=570,#ff0033,3]解除安裝時,「註冊表」寫法[/glow]

1.適用平台: win2k/xp (win98 也可以,只是沒有作用而已)
2.適用軟體: NSIS, Setup Factory, Wise, InstallShield 6

我想來寫一些有用的資訊,也當成是整理的心得吧。這一段
除了用在 NSIS script (對不起,我還是喜歡使用腳本這個詞),
也可以用在純對 Uninstall 的瞭解上,或是像 March 塞在
SetupFactory 裡面。

這一段可以使用於 win2k /xp 。用在 win98 上面,不會有任何
影響 (不會當機,這個作用也不會活化) 。如果想要你的 NSIS
安裝後,在 Add/Remove Program 就是比別人多一點東西出來,
可以參考。


1.前提
在 Add/Remove Program ,可以看到有的程式有
Click here for support information.

按下連結,就會出現「請使用下列資訊取得 xxxx 的技術支援」。
有的程式就是沒有這一項。但們的位置都會出現在如下位址。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

比如底下的 abcAVI

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\abcAVI]
"DisplayName"="abcAVI Tag Editor v1.5"
"DisplayVersion"="1.5"
"URLInfoAbout"="http://abcavi.tk"
"Publisher"="2002, Alexander Sorkin aka KibiZoid"
"HelpLink"="http://abcavi.tk"
"Comments"="Add, browse and change all info tags for AVI files (supported formats: RIFF, IDivX, MovieID). abcAVI allows to view total information on AVI files. Can also change fourCC, frame rate and frame size of AVI files."
"UninstallString"="C:\\Progra~1\\abcAVI\\uninstal.exe rundll32.exe syssetup.dll,SetupInfObjectInstallAction RNT 4 C:\\Progra~1\\abcAVI\\Avi_tags.inf abcavi"



PS:這一次請注意看上圖,有沒有出現 hyperlink 的部分?

如果在 Registry 裡面,位置如上。這是可以玩花樣的地方。


3.NSIS 套用方式
可是,只有兩項 "DisplayName" "UninstallString" ,一定還少了很多東西。
這是標準的 NSIS forum 提供的範例,你可以套用如上做法,
即使你的寫的 NSIS 完整安裝,該有的功能,一樣也不少。

Note: 因為多語言,所以裡面所提到的,全部都是英文,沒有使用任何繁體中文或簡體中文。

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "DisplayIcon" "$SYSDIR\${PROGMAINEXE}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "DisplayName" "${PROG} ${VER_1}.${VER_2} ${PATCHTYPE_ENU}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}"  \
  "DisplayVersion" "${VER_1}.${VER_2}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "URLInfoAbout" "http://vobsub.edensrising.com/vobsub.php"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Contact" "gabest@freemail.hu, kiiali@cpatch.org"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Publisher" "Copyright (c) 2002, Gabest.  Chinese (Simplified) and Chinese (Traditional) Localized by Kii Ali"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "HelpLink" "http://vobsub.edensrising.com/vobsub.php"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "URLUpdateInfo" "http://vobsub.edensrising.com/vobsub.php"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Readme" "$INSTDIR\${README_CHT}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Comments" "Chinese (Simplified) and Chinese (Traditional) VOBSUB localized version by Kii Ali, for playing DivX movie with subtitles.  It is a must for DivX player."




可玩的花樣詳解
"DisplayName"= 程式的完整名稱。注意: 這裡要包含「版本」。

"DisplayIcon"= 這一段很多人困擾。大部分解除安裝程式都沒有這一段。
              但如果不加,每一個解除安裝圖示出來的,都是標準 Install Shield
              的圖示,這很討厭。

              我是習慣使用主程式的名稱。主程式也可以做圖示的來源,不是嗎?
              沒有人規定一定要使用 *.ICO 檔案啊。

  "DisplayIcon"= "C:\\Program Files\\Ultraedit\\uedit32.exe"

"UninstallString"= 解除安裝的動作字串。範例如下

  "UninstallString"="MsiExec.exe /I{6A8CDFEF-458F-4E4A-B67A-2B90750E22D6}"


"Publisher"= 「發行者」。如果你是使用 NSIS ,可以在裡面塞自己的名稱。
           或是竄改你想要有的名稱。會出現在「支援資訊」對話方塊。

"DisplayVersion"= 「版本號碼」,出現在「支援資訊」對話方塊。

"Contact"=    「連絡者」,出現在「支援資訊」對話方塊。

"URLInfoAbout"= 如果有,會以 publisher 的超連結方式出現。

"URLUpdateInfo"= 「產品更新」,出現在「支援資訊」對話方塊。

"Comments"=  開玩笑,這一段當然任你唬爛,或是吹噓這個產品有什麼功能。
            或許當別人看到這一段文字時,本來想要解除安裝的,現在就
            不想解除了。
  
"Readme"=    README 檔案路徑,要使用 http 型態也可以。可以使用文字
            型態填入,不過某些微軟出版的軟體會使用比較變態的 16 進位
            unicode 填入。如下。

"Readme"=hex(2):52,00,65,00,61,00,64,00,6d,00,65,00,2e,00,74,00,78,00,74,00,00,00"

            拼湊出來是 "Readme.txt"

"HelpLink"= 應該是「支援資訊」,出現在「支援資訊」對話方塊。不過看到的
           都是比較變態的 16 進位 unicode 型態,只好將就一下。

"HelpLink"=hex(2):73,00,75,00,70,00,70,00,6f,00,72,00,74,00,40,00,64,00,61,00,\
65,00,6d,00,6f,00,6e,00,2d,00,74,00,6f,00,6f,00,6c,00,73,00,2e,00,63,00,6f,\
00,6d,00,00,00

            拼湊出來是 "support@daemon-tools.com"

"HelpLink"=hex(2):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,54,00,6f,00,6f,00,\
6c,00,5a,00,6f,00,6e,00,65,00,2f,00,4c,00,6f,00,63,00,53,00,74,00,75,00,64,\
00,69,00,6f,00,00,00
            拼湊出來是 "http://Toolzone/LocStudio"


你可以去試試自己的 registry ,在中文化之後,塞入這些字串,感覺是

實在很爽快。實在很爽快。:em11:  :em16:  :em24:  :em06:  :em03:  :em10:  :em09:


當然,您的「註冊項」一樣可以寫繁體中文項目。簡體中文亦同。
Section "zh-tw:  Create Uninstaller"
SectionIn 1

; 寫入安裝路徑到註冊登錄檔案
WriteRegStr HKLM SOFTWARE\${PROG} "Install_Dir" "$INSTDIR"

; 寫入 windows 的解除安裝
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "DisplayIcon" "$INSTDIR\${PROGMAINEXE}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "DisplayName" "${PROG} ${VER_1}.${VER_2}.${VER_3} ${PATCHTYPE_ENU}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}"  \
  "DisplayVersion" "${VER_1}.${VER_2}.${VER_3}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "URLInfoAbout" "http://www.realvnc.com/"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Contact" "研發:  訪客無法瀏覽此圖片或連結,請先 註冊登入會員   本地化製作: kiiali@cpatch.org"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Publisher" "Copyright (c) 2002, RealVNC."
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "HelpLink" "http://www.realvnc.com/support.html"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "URLUpdateInfo" "http://www.realvnc.com/download.html"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Readme" "$INSTDIR\${README_CHT}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROG}" \
  "Comments" " ${PROG} ${VER_1}.${VER_2}.${VER_3} 的中文 (簡體) 和中文 (繁體) ,由 Kii Ali <kiiali@cpatch.org> 本地化製作完成。用於電腦的遠端控制軟體,可用其自身的客戶端程式,也可以使用瀏覽器遠端控制。"

WriteUninstaller "$INSTDIR\Uninstall.exe"




在 MDaemon 安裝後,你可以發現多出了這兩個東西。當然在系統裡面,會正確對應出中文。
"RegName"= 顧名思義,這裡可以顯示註冊使用的名稱。

"RegNum"= 註冊號碼。

TOP

NSIS 的作業系統判斷方式

■失敗案例

原先我是參考 一個 nsisos.dll 插件。這個東西來自於 vobsub 作者,手上也有 vobsub 的範例可用。但是那一種是 NSIS 2.0a0 的寫法,使用 StrComp 的寫法,用在 2.0b 系列的不太好吧。新版的 manual 完全不提此事,這是放棄的原因。如下:

短短幾行,用兩個字串比較的方式。很標準的舊寫法。Gabest 的寫法 Detecting OS Type 其實是蠻嚇人的。

─────────────────────
;  Detecting OS type
  SetDetailsPrint None
  File /oname=$TEMP\nsisos.dll nsisos.dll
  CallInstDLL $TEMP\nsisos.dll osplatform
  Pop $R0
  Delete $TEMP\nsisos.dll
  SetDetailsPrint Both
;  Done Detecting OS Type

  StrCmp $R0 "WINNT" 0 DoElse0
StrCpy $R8 $SYSDIR
  Goto End0
  DoElse0:
StrCpy $R8 $WINDIR
  End0:
─────────────────────

■成功案例

說穿了不值一文。Win98 在 system 目錄下不會有 CMD.EXE ,而 Windows 2000 在 system32 目錄下,有。

所以就來檢查一下。
─────────────────────
; 檢查作業系統版本,然後把 Win98_checked 放在檔案尾端,加警告視窗。
IfFileExists "$SYSDIR\cmd.exe" Win2k_checked Win98_checked

Win98_checked:
MessageBox MB_OK|MB_ICONINformATION  "$(MSG_Win98_checked)"
Quit

Win2k_checked:
─────────────────────

然後給那些不信邪,一定要在 Win2k 安裝 Win98 版本的傢伙,來點小小的警告。

─────────────────────
LangString MSG_Win98_checked ${LANG_ENGLISH}    "Your OS detected as Win98/SE/ME.  It cannot install Unicode-at-on (Win2k/XP).  Please download/install correct version."
LangString MSG_Win98_checked ${LANG_TRADCHINESE}    "偵測到你的系統是 Win98/SE/ME ,無法安裝 Unicode 補完計畫 (Win2k/XP) 。請下載/安裝正確版本。"
─────────────────────

當然你也可以不警告,就直接 Quit 掉,隨便你變化了,不是嗎?
搭配多語言 LangString 的方式,一樣完美,可不是?

又,你可以玩看看在 win2k 底下替 cmd.exe 改名。是可以改名,也不會鎖定。但不到一秒鐘,系統又會生出另外一個 cmd.exe ,想要騙 win2k 系統還真難騙啊。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。