多国语言

!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.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 使用的语言名称 (* 进阶)

posted @ 2008-09-28 15:05  kin2321  阅读(976)  评论(0编辑  收藏  举报