杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2003|回复: 0

NSIS 多语言脚本写作密技

[复制链接]
发表于 2016-9-2 17:06:39 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. ;=======================================================
  2. ; ■1.定义变数、安装目录、输出档案、图示
  3. ;=======================================================
  4. ; 只要在这里写好,其他的都按照定义的变数下去跑,就省力多了。
  5. ;
  6. ;==============================
  7. ; 1.1 版本号码/名称
  8. ;
  9. !define VER_1 4 ;软体版本号码 1 ,如 Eudora 4.3.1.2 四位版本号码
  10. !define VER_2 05 ;软体版本号码 2
  11. ;!define VER_3 xxx ;软体版本号码 3 (* 进阶)
  12. ;!define VER_4 yyy ;软体版本号码 4 (* 进阶)
  13. ;!define VER_R zzz ;中文化同版本第几更版 (* 进阶)
  14. !define MUI_PRODUCT "MDaemon" ;程式名称 (可使用大小写)
  15. !define PROGFNHEADER "mdaemon" ;中文化档案名称的主要部分 (全部小写)
  16. !define PROGMAINEXE "mdaemon.exe" ;主程式执行档案名称 (含.exe)
  17. ;
  18. ;==============================
  19. ; 1.2 读我档案/输出档案
  20. ;
  21. ; 读我显示,包括 CHS/CHT/ENU 三个版本。如果你不需要制作
  22. ; 多语言中文化版本,只要考虑一个“读我”即可。这个读我,
  23. ; 通常拿来放“此中文化的描述档案”,而非一般软体的 readme 。
  24. ;
  25. ; 档案命名: (全部小写)。
  26. ; (cpatch) c + ${PROGFNHEADER} + 版本号码 _(底线) 第几中文化版本 . 副档名
  27. ; (hanzify) ha _(底线) ${PROGFNHEADER} + 版本号码 _(底线) 作者名 . 扩展名
  28. ;
  29. ;!define README "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
  30. !define README_CHS "c${PROGFNHEADER}${VER_1}${VER_2}_gb.txt"
  31. !define README_CHT "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
  32. !define README_ENU "c${PROGFNHEADER}${VER_1}${VER_2}.txt"
  33. OUTFILE "c${PROGFNHEADER}${VER_1}${VER_2}.exe"

  34. ;==============================
  35. ; 1.3 预设安装目录 (尾端不加 \)
  36. ;
  37. ; 通常会出现在 "C:\Program Files\xxxx " 这种目录。
  38. ; 也可以使用 ${AppPath} 在注册表寻找旧版安装目录。
  39. ; 如果注册表的安装目录 (尾端 \) 出现,不要使用,以免发生错误。

  40. ;InstallDir "$PROGRAMFILES\${MUI_PRODUCT}"
  41. ;InstallDir "${AppPath}"
  42. InstallDir "C:\MDaemon"

  43. ;==============================
  44. ; 1.4 版权影像
  45. ;
  46. ; 只需要一个就够 (一定要 bmp 格式),第二个是拿来花俏用的。
  47. ; 可以只使用一个,或完全不使用。

  48. !define SPLASH1 "mdaeomon4_cht.bmp"
  49. !define SPLASH2 "mdaeomon4_chs.bmp"

  50. ;==============================
  51. ; 1.5 安装程式型态
  52. ;
  53. ; 中文化/直接安装版/还是补缀补丁?安装时出现在 caption 部分。
  54. ; 解除安装时,也会出现在注册表。

  55. !define PATCHTYPE_ENU "(CN+TW) localized"
  56. !define PATCHTYPE_CHT "(CN+TW) 中文化"
  57. !define PATCHTYPE_CHS "(CN+TW) 笢恅赵"

  58. ;=======================================================
  59. ; ■2.使用者介面
  60. ;=======================================================
  61. ; 这一段的用途,在于强制覆写 system.nsh 的英文预设设定值,
  62. ; 通常只有变更 “字型”“图示”
  63. ;==============================
  64. ; 2.1 字型

  65. ; 安装介面的字型预设大小 8,一定要改掉,否则在 win98 中文不好看。
  66. ; 如下。双语言中文化,使用 "Tahoma" 即可。
  67. ; 不需要特别指定“新宋体”或“宋体”。

  68. ;!define MUI_FONT "MS Shell Dlg"
  69. ;!define MUI_FONTSIZE "8"
  70. ;!define MUI_FONT_HEADER "MS Sans Serif"
  71. ;!define MUI_FONTSIZE_HEADER "8"
  72. ;
  73. ; 上列: NSIS 字型“预设值”,下列: 字型“建议修改值”。
  74. ;
  75. !define MUI_FONT "Tahoma"
  76. !define MUI_FONTSIZE "9"
  77. !define MUI_FONT_HEADER "Tahoma"
  78. !define MUI_FONTSIZE_HEADER "9"

  79. ;==============================
  80. ; 2.2 图示

  81. ; 安装程式图示: 通常我使用主程式的图示,另外用 VC 抽取出来。
  82. ; 解除安装图示: 为了让 [控制台 | 新增/移除程式] 出现正确图示,还是用同一个图示。
  83. ; 有时候则使用它附的图示 (因为看起来不错)。
  84. ;!define MUI_ICON "${NSISDIR}\Contrib\Icons\modern-install.ico"
  85. ;!define MUI_UNICON "${NSISDIR}\Contrib\Icons\modern-uninstall.ico"
  86. ;
  87. ; 上列: NSIS 图示“预设值”,风格有点像 InstallShield 6 ,也不错。
  88. ; 下列: 自订图示,请指定正确名称

  89. !define MUI_ICON "mdaemon4.ico"
  90. !define MUI_UNICON "mdaemon4.ico"

  91. ;==============================
  92. ; 2.3 其他 (* 进阶)

  93. !define MUI_UI "${NSISDIR}\Contrib\UIs\modern2.exe"
  94. !define MUI_CHECKBITMAP "${NSISDIR}\Contrib\Icons\modern.bmp"
  95. !define MUI_FONTstyle_HEADER "700"
  96. !define MUI_FONT_TITLE "Verdana"
  97. !define MUI_FONTSIZE_TITLE "12"
  98. !define MUI_FONTstyle_TITLE "700"
  99. !define MUI_INSTALLCOLORS "/windows"
  100. !define MUI_PROGRESSBAR "smooth"
  101. !define MUI_SPECIALINI "${NSISDIR}\Contrib\Modern UI\ioSpecial.ini"
  102. !define MUI_SPECIALBITMAP "${NSISDIR}\Contrib\Icons\modern-wizard.bmp"
  103. !define MUI_BGCOLOR "0xFFFFFF"

  104. ;=======================================================
  105. ; ■3.多语言系统
  106. ;=======================================================
  107. ; 载入 Modern UI\System.nsh 之用。
  108. ;==========================
  109. ; 3.1 前置相同变数,视需要而定。
  110. ;
  111. ; 通常出现在更换版本时,原脚本的变数校正。

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

  114. ;显示中文化标题,依 ENU/CHT/CHS 语言的不同。

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

  118. ;==========================
  119. ; 3.2 载入 Modern UI 系统

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

  121. ;==========================
  122. ; 3.3 使用者介面
  123. ;
  124. ; 如果不要这些对话方块,不做 define ,就不会出现。

  125. !define MUI_WELCOMEPAGE ;欢迎页面
  126. !define MUI_LICENSEPAGE ;授权页面
  127. !define MUI_COMPONENTSPAGE ;元件页面
  128. !define MUI_DIRECTORYPAGE ;目录选择
  129. !define MUI_ABORTWARNING ;中止警告
  130. !define MUI_UNINSTALLER ;解除安装程式
  131. !define MUI_UNCONFIRMPAGE ;不做确认页面
  132. ; !define MUI_STARTMENUPAGE ;选择开始功能表
  133. !define MUI_FINISHPAGE ;出现完成页面,执行程式和读我。
  134. !define MUI_FINISHPAGE_RUN "$INSTDIR\app\${PROGMAINEXE}"
  135. !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\${README_CHT}"
  136. ; !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\$(README)"

  137. ; LangString README ${LANG_ENGLISH} "${README_ENU}"
  138. ; LangString README ${LANG_TRADCHINESE} "${README_CHT}"
  139. ; LangString README ${LANG_SIMPCHINESE} "${README_CHS}"
  140. ; 上面这段 LangString 并不能套用在 SHOWREADME ,真奇怪。

  141. !insertmacro MUI_SYSTEM ;使用者介面系统

  142. ;==============================
  143. ; 3.4 各国语言

  144. !insertmacro MUI_LANGUAGE "English"
  145. !insertmacro MUI_LANGUAGE "SimpChinese"
  146. !insertmacro MUI_LANGUAGE "TradChinese"

  147. ;==============================
  148. ; 3.5 授权文字 (* 进阶)
  149. ;
  150. ; 这些档案没有出现在 NSIS 预设包内。如果你手上没有 license 档案,
  151. ; 请直接 remark 掉。
  152. ; 这些东西会先被解压缩出来。保留这几行在任何 File 指令之前!)
  153. ; 只能用于 BZIP2 压缩

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

  157. !insertmacro MUI_RESERVEFILE_LANGDLL

  158. ;=======================================================
  159. ; ■4.安装程式,安装开始的前置动作 (* 进阶)
  160. ;=======================================================
  161. ; 如果不需要,你可以全部 remark。
  162. Function .onInit

  163. ;==============================
  164. ; 4.1 显示版权影像
  165. ;
  166. ; 旧版可使用 magiclime 做淡入淡出。不过这一版没了,改成
  167. ; advsplash ,外挂方式。解压缩到临时目录,显示 splash ,然后删掉。
  168. ; 注意: nsis 2.0a0 有 magicsplash 档案。不过 2.0b1 居然又不见了。

  169. SetOutPath $TEMP
  170. File /oname=splash1.bmp ${SPLASH1}
  171. File /oname=splash2.bmp ${SPLASH2}
  172. ; File /oname=spltmp.exe "${NSISDIR}\bin\magiclime.exe"
  173. ; ExecWait '"$TEMP\spltmp.exe" splash1.bmp'
  174. ; ExecWait '"$TEMP\spltmp.exe" splash2.bmp'

  175. advsplash::show 1000 600 400 -1 $TEMP\splash1
  176. advsplash::show 1000 600 400 -1 $TEMP\splash2

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

  179. Delete $TEMP\spltmp.exe
  180. Delete $TEMP\splash1.bmp
  181. Delete $TEMP\splash2.bmp

  182. ;==============================
  183. ; 4.2 字型选择 (* 进阶)
  184. ;
  185. ; 只影响安装程式的语言选择 dialog ,因此不要使用中文字型名称。
  186. Push Verdana
  187. Push 9

  188. ;==============================
  189. ; 4.3 语言 (* 进阶)
  190. ;
  191. ; 塞了 ENU/CHT/CHS 三个语言。你要 18 个语言全塞,也不反对。大小大概增加 20 kb 左右。
  192. ; 如果不是多语言中文化安装,你可以全部 remark 掉。

  193. !insertmacro MUI_LANGDLL_PUSH "English"
  194. !insertmacro MUI_LANGDLL_PUSH "SimpChinese"
  195. !insertmacro MUI_LANGDLL_PUSH "TradChinese"

  196. Push 3F ;3 = 语言数目, F = 变更字型

  197. LangDLL::LangDialog "Installer Language" "Please select a language."

  198. ; 上面这一句,不要中文化。除非你想让老外看到乱码。

  199. Pop $LANGUAGE
  200. StrCmp $LANGUAGE "cancel" 0 +2
  201. Abort

  202. ;==============================
  203. ; 4.4 安装前置动作 (修改注册表) (* 进阶)
  204. ;
  205. ; 视你需要,可以偷偷做一些动作。

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

  208. ;==============================
  209. ; 4.5 寻找旧版已安装的目录。 (* 进阶)
  210. ;
  211. ; 如果 AppPath 读出的尾端有 \ 符号,请不要直接使用于 INSTDIR 指令,以免发生错误。

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

  213. FunctionEnd

  214. ;=======================================================
  215. ; ■5.安装程式,安装完成后置动作 (* 进阶)
  216. ;=======================================================
  217. ; 如果不需要,你可以全部 remark。
  218. ;==============================
  219. ; 5.1 函式定义开始
  220. Function .onInstSuccess

  221. ;==============================
  222. ; 5.2 安装完成后,执行 ExecShell
  223. ;
  224. ; 视个人需要而定,我只用在 Eudora 安装而已。
  225. ; ;------------------------------------------
  226. ; !macro MUI_INSTSUCCESS1 LANGID TEXT
  227. ;
  228. ; StrCmp $LANGUAGE ${LANGID} "" +3
  229. ; MessageBox MB_YESNO|MB_ICONQUESTION "${TEXT}" IDNO Nomapi
  230. ; ExecShell open '$INSTDIR\SWMAPI.EXE'
  231. ; !macroend
  232. ; ;------------------------------------------;

  233. ; 下列是 ENU/CHT/CHS 三个语言的动作。
  234. ;
  235. ; !insertmacro MUI_INSTSUCCESS1 1033 "Do you want to install ${NAME} as a default mailer? It will excute MAPI installer."
  236. ; !insertmacro MUI_INSTSUCCESS1 1028 "你想要安装 ${NAME} 做为预设信件程式吗?将执行外部 MAPI 安装程式。"
  237. ; !insertmacro MUI_INSTSUCCESS1 2052 "斓砑猁假蚾 ${NAME} 酕峈苏?;蛔璃最唗镉ˋ蔚堍俴俋窒 MAPI 假蚾最唗﹝"
  238. ; Nomapi:

  239. ;==============================
  240. ; 5.3 安装后,要求使用者读取 README 档案

  241. ; ;------------------------------------------
  242. ; !macro MUI_INSTSUCCESS2 LANGID TEXT README

  243. ; StrCmp $LANGUAGE ${LANGID} "" +3
  244. ; MessageBox MB_YESNO|MB_ICONQUESTION "${TEXT}" IDNO NoReadme
  245. ; ExecShell open notepad '$INSTDIR\${README}'
  246. ; !macroend
  247. ; ;------------------------------------------

  248. ; 下列是 ENU/CHT/CHS 三个语言的动作。

  249. ; !insertmacro MUI_INSTSUCCESS2 1033 "Setup has been completed successfully . Press [Yes] to continue README file." "${README_ENU}"
  250. ; !insertmacro MUI_INSTSUCCESS2 1028 "安装已成功地完成。按下 [Yes] 继续读取 README 档案。" "${README_CHT}"
  251. ; !insertmacro MUI_INSTSUCCESS2 2052 "假蚾眒伧髡华俇伧﹝偌狟 [Yes] 樟哿黍?; README 恅璃﹝" "${README_CHS}"
  252. ; NoReadme:

  253. ;==============================
  254. ; 5.4 函式定义结束
  255. FunctionEnd

  256. ;=======================================================
  257. ; ■6.安装的所有档案
  258. ;=======================================================

  259. ;==============================
  260. ; 6.1 安装类型

  261. ; 两种应该很够了。

  262. InstType "Minimum"
  263. InstType "Standard"

  264. SetOverwrite on

  265. ;==============================
  266. ; 6.3 安装的各个节段

  267. Section "MDaemon" SecMDaemon
  268. SectionIn 1 2

  269. ; 6.3.1 中文化的读我
  270. ; 通常塞在安装的主目录。

  271. SetOutPath $INSTDIR
  272. File "${README_CHT}"
  273. File "${README_CHS}"

  274. ; 6.3.2 中文化的程式档案

  275. ; 通常不使用 *.* 型态,而个别指定,以免包装错误。
  276. ; 常常是 *.DLL *.EXE *.AX 等类型。我都把这类放在 cht 为首的工作目录。

  277. SetOutPath $INSTDIR\app
  278. File "cht\AccountPrune.exe"
  279. File "cht\CFILTER.EXE"
  280. File "cht\IMPORTNT.EXE"
  281. File "cht\ListPrune.exe"
  282. File "cht\MD3CONV.EXE"
  283. File "cht\MDAEMON.EXE"
  284. File "cht\MDCONFIG.EXE"
  285. File "cht\MDLAUNCH.EXE"
  286. File "cht\MDSTATS.EXE"
  287. File "cht\MDUSER.DLL"
  288. File "cht\MDUserLdap.dll"
  289. File "cht\MigrateUsers.exe"
  290. File "cht\ROBOEX32.DLL"
  291. File "cht\UninstallSurvey.exe"
  292. File "cht\UNWISE.EXE"
  293. File "cht\WCIMPORT.EXE"
  294. File "cht\XCEEDZIP.DLL"

  295. ; 6.3.3 中文化的文字档案
  296. ;
  297. ; 通常是 (*.cnt, *.txt *.dat *.ini) 类型。
  298. ; 无语言区分者,仍放在 pack 为首的工作目录。
  299. ; 有语言区分者,放在 text/cht 与 text/chs 为首的工作目录。

  300. ; 6.3.3.1 如果有旧版,会有一些“一定”要删除的旧版档案。然后再由安装程式补上新版。

  301. SetOutPath $INSTDIR\app
  302. Delete "$INSTDIR\app\HELP.DAT"
  303. Delete "$INSTDIR\app\MDAEMON.CNT"
  304. Delete "$INSTDIR\app\acctinfo.dat"

  305. File "pack405\app\CFILTER.INI"
  306. File "pack405\app\MDSTATS.INI"

  307. ; 6.3.3.2 如果有旧版,也会有一些“不能删除”的旧版档案。

  308. ; 这段是使用在 UltraEdit ,把 windows 目录的 INI 移动过来。MDaemon 不用这一段。
  309. ;
  310. ; IfFileExists "$WINDIR\UEdit32.ini" DO1 DO2
  311. ; DO1: ;把 $WINDIR 的移动到安装目录
  312. ; Rename "$WINDIR\UEdit32.ini" "$INSTDIR\Uedit32.ini"
  313. ; DO2: ;如果没有,则写入一个假的 INI,以修正 HTMLTIDY 的功能。如果安装目录已有,则不盖掉。

  314. SetOverwrite off ;停用强制覆写
  315. File "pack405\app\MDAEMON.INI"
  316. SetOverwrite on ;判断完毕之后,启用强制覆写

  317. ; 6.3.3.3 搞一些好玩的,比如塞入自动使软体注册的资料
  318. ; 正式版本就不要这样做,以免太嚣张,反而不好。
  319. ;
  320. ; WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "Name" "My_reg_Name"
  321. ; WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "Company" "My_reg_Company"
  322. ; WriteINIStr "$INSTDIR\app\mdaemon.ini" "Registration" "4XKey" "GDPFFMF-QAWLYFJ-XQDIYAO"

  323. ; 6.3.3.4 补上新版档案
  324. ;
  325. ; 依照各种语言,自动执行,分配正确的档案。使用者不必再选择。
  326. ; 先写一个巨集,自动判断作业系统语言。 1033 enu, 1028 cht, 2052 chs
  327. ;------------------------------------------
  328. !macro MUI_COPYTEXTFILE LANGID ACTION_COPYTEXTFILE

  329. StrCmp $LANGUAGE ${LANGID} "" +3
  330. ${ACTION_COPYTEXTFILE}

  331. !macroend

  332. ; !insertmacro MUI_COPYTEXTFILE 1033 'File "text405\enu\Help.dat"'
  333. ; !insertmacro MUI_COPYTEXTFILE 1033 'File "text405\enu\MDaemon.cnt"'
  334. ;
  335. ; 英文的不动,只做为对照组。注意单引号和双引号。
  336. ; 这种脚本写法其实蛮笨的,应该有更好的方法。

  337. !insertmacro MUI_COPYTEXTFILE 1028 'File "text405\cht\Help.dat"'
  338. !insertmacro MUI_COPYTEXTFILE 1028 'File "text405\cht\MDaemon.cnt"'
  339. !insertmacro MUI_COPYTEXTFILE 2052 'File "text405\chs\Help.dat"'
  340. !insertmacro MUI_COPYTEXTFILE 2052 'File "text405\chs\MDaemon.cnt"'

  341. ; 6.3.4 非中文化档案 (不用修改的部分)

  342. ; 可使用 *.* 这种型态。 我都把这类放在 pack 为首的工作目录。

  343. SetOutPath $INSTDIR\app
  344. File "pack405\app\AccountPrune.txt"
  345. File "pack405\app\bwcc32.dll"
  346. File "pack405\app\ADDUSER.SMP"
  347. File "pack405\app\CFAPP.ICO"
  348. File "pack405\app\CFILTER.DLL"
  349. File "pack405\app\DEDUPE.EXE"
  350. File "pack405\app\DIRREORG.EXE"
  351. File "pack405\app\DomainPOP.dsc"
  352. File "pack405\app\EDITUSER.SMP"
  353. File "pack405\app\FILELIST.DAT"
  354. File "pack405\app\INETWH32.DLL"
  355. File "pack405\app\INSTALL.LOG"
  356. File "pack405\app\MailboxSize.exe"
  357. File "pack405\app\MailboxSize.txt"
  358. File "pack405\app\MDAEMON.DSC"
  359. File "pack405\app\MDAEMON.HLP"
  360. File "pack405\app\NTUTIL.DLL"
  361. File "pack405\app\ULREPAIR.EXE"
  362. File "pack405\app\WISECHCK.EXE"
  363. File "pack405\app\WISEUPDT.EXE"
  364. File "pack405\app\WP2WC.EXE"
  365. File "pack405\app\XCDSFX32.BIN"

  366. SetOutPath $INSTDIR\cgi
  367. File "pack405\cgi\*.*"
  368. SectionEnd

  369. Section "MDaemon Docs" SecMDaemonDocs
  370. SectionIn 2
  371. SetOutPath $INSTDIR\docs
  372. File "pack405\docs\*.*"
  373. SetOutPath $INSTDIR\docs\api
  374. File "pack405\docs\api\*.*"
  375. SectionEnd

  376. Section "World Client" SecWorldClient
  377. SectionIn 2
  378. SetOutPath $INSTDIR\wcstandard
  379. File "pack405\wcstandard\*.*"
  380. ; 底下为需要中文化的部分
  381. File "cht\wcstandard\WCStandard.exe"
  382. File "cht\wcstandard\WorldClient.dll"
  383. File "cht\wcstandard\XceedZip.dll"

  384. SetOutPath $INSTDIR\wcstandard\html
  385. File "pack405\wcstandard\html\*.*"
  386. SetOutPath $INSTDIR\wcstandard\html\help
  387. File "pack405\wcstandard\html\help\*.*"
  388. SetOutPath $INSTDIR\wcstandard\templates
  389. File "pack405\wcstandard\templates\*.*"
  390. SectionEnd

  391. Section "Web Config" SecWebConfig
  392. SectionIn 2
  393. SetOutPath $INSTDIR\webconfig
  394. File "pack405\webconfig\*.*"
  395. ; 底下为需要中文化的部分
  396. File "cht\webconfig\WebConfig.exe"

  397. SetOutPath $INSTDIR\webconfig\html
  398. File "pack405\webconfig\html\*.*"
  399. SetOutPath $INSTDIR\webconfig\templates
  400. File "pack405\webconfig\templates\*.*"
  401. SectionEnd

  402. ;==============================
  403. ; 6.4 加入到“开始选单”
  404. ;

  405. Section "Add shortcut to Start Menu" SecStartMenu
  406. SectionIn 1 2
  407. SetOutPath "$INSTDIR"

  408. CreateDirectory "$SMPROGRAMS\${MUI_PRODUCT}"
  409. ; 有时候 CreateShortCut 会出问题,不如用这个动作
  410. ; 直接强制 installer 建立目录。这样比较贱。

  411. CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\MDaemon.lnk" \
  412. "$INSTDIR\app\mdaemon.exe"
  413. CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\MDConfig.lnk" \
  414. "$INSTDIR\app\MDConfig.exe"
  415. CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\Uninstall ${MUI_PRODUCT}.lnk" \
  416. "$INSTDIR\Uninstall.exe"
  417. SectionEnd

  418. ;==============================
  419. ; 6.5 加入到“快速启动”
  420. ;
  421. ; 不是每个程式都要加入“快速启动”列,视需要而定。
  422. ;
  423. ;Section "Add shortcut to Quicklaunch" SecQuicklaunch
  424. ; SectionIn 1 2
  425. ; CreateShortCut "$QUICKLAUNCH\${MUI_PRODUCT}.lnk" \
  426. ; "$INSTDIR\app\${PROGMAINEXE}"
  427. ;SectionEnd

  428. ;==============================
  429. ; 6.6 加入到“桌面”
  430. ;

  431. Section "Add shortcut to Desktop" SecDesktop
  432. SectionIn 1 2
  433. CreateShortCut "$DESKTOP\${MUI_PRODUCT}.lnk" \
  434. "$INSTDIR\app\${PROGMAINEXE}"
  435. SectionEnd

  436. ;==============================
  437. ; 6.6 加入到“滑鼠右键” (* 进阶)
  438. ;
  439. ; 只用在 UltraEdit

  440. ;Section "Add to Right mouse button" SecRightMouse
  441. ; SectionIn 1 2
  442. ; WriteRegStr HKLM "SOFTWARE\Classes\*\shellex\ContextMenuHandlers\UltraEdit-32" "" "{b5eedee0-c06e-11cf-8c56-444553540000}"
  443. ; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}" "" "UltraEdit-32"
  444. ; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32" "" "$INSTDIR\ue32ctmn.dll"
  445. ; WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32" "ThreadingModel" "Apartment"
  446. ;SectionEnd

  447. ;=======================================================
  448. ; ■7.写入解除安装程式
  449. ;=======================================================
  450. ; 如果你嫌太难,可以不写解除安装程式,全部 remark 掉。
  451. ;==============================
  452. ; 7.1 节段开始

  453. Section "Create Uninstaller" SecCreateUninst
  454. SectionIn 1 2

  455. ;==============================
  456. ; 7.2 写入到“注册表”(基础)
  457. ;
  458. ; 一般只有写下面这一段,指定安装目录。

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

  461. ;==============================
  462. ; 7.3 写入到“注册表” (* 进阶)
  463. ;
  464. ; 下面这段注册表值,只是在 {控制台 | 新增移除程式] 花俏用的。
  465. ; 如果看不懂,可以全部不使用。
  466. ; 参考 http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=24&show=0
  467. ;
  468. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  469. "DisplayIcon" "$INSTDIR\app\${PROGMAINEXE}"
  470. ; "DisplayIcon" "$INSTDIR\${PROGMAINEXE}" ; 一般使用这个型态。只有 MDaemon 例外。
  471. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  472. "DisplayName" "${MUI_PRODUCT} ${VER_1}.${VER_2} ${PATCHTYPE_ENU}"
  473. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  474. "DisplayVersion" "${VER_1}.${VER_2}"
  475. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  476. "UninstallString" "$INSTDIR\uninstall.exe"
  477. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  478. "URLInfoAbout" "http://www.altn.com/Products/Default.asp?product_id=MDaemon"
  479. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  480. "Contact" "kiiali@cpatch.org"
  481. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  482. "HelpLink" "http://www.altn.com/Support/Default.asp?product_id=MDaemon"
  483. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  484. "URLUpdateInfo" "http://www.altn.com/Download/Default.asp"
  485. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  486. "Readme" "$INSTDIR\${README_CHT}"
  487. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  488. "Comments" "Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali, for Mailer Daemon with win32 plateform."
  489. WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" \
  490. "Publisher" "Copyright (c) 2002, Alt-N Technology."

  491. ;==============================
  492. ; 7.4 依照各种语言,自动写入不同的注册表值 (* 进阶)
  493. ; 包括 ENU/CHT/CHS
  494. ;------------------------------------------
  495. !macro MUI_REGMUI1 LANGID TEXT

  496. StrCmp $LANGUAGE ${LANGID} "" +3
  497. ${TEXT}

  498. !macroend

  499. !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." '
  500. !insertmacro MUI_REGMUI1 1028 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "中文 (中国大陆) 与 中文 (台湾) ${MUI_PRODUCT} 本地化版本,由 Kii Ali 制作,用于 win32 平台架设个人或公司的信件伺服器。" '
  501. !insertmacro MUI_REGMUI1 2052 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Comments" "笢恅 (笢弊湮翻) 迵 笢恅 (怢俜) ${MUI_PRODUCT} 挂华赵唳挂ㄛ蚕 Kii Ali 秶钎ㄛ蚚衾 win32 Ⅸ;怢殇扢跺?;么鼠侗腔蛔璃督昢け;﹝" '

  502. ;==============================
  503. ; 7.5 依照各种语言,自动写入不同的注册表值 (* 进阶)
  504. ; 包括 ENU/CHT/CHS
  505. ;------------------------------------------
  506. !macro MUI_REGMUI2 LANGID TEXT

  507. StrCmp $LANGUAGE ${LANGID} "" +3
  508. ${TEXT}

  509. !macroend
  510. !insertmacro MUI_REGMUI2 1033 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "Copyright (c) 2002, Alt-N Technology." '
  511. !insertmacro MUI_REGMUI2 1028 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "版权所有 (c) 2002, Alt-N Technology. " '
  512. !insertmacro MUI_REGMUI2 2052 'WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "Publisher" "唳?;垀衄 (c) 2002, Alt-N Technology." '
  513. ;------------------------------------------

  514. ;==============================
  515. ; 7.6 现在写入“解除安装程式”

  516. ; 写入语言名称到注册表 (用于解除安装程式)
  517. WriteRegStr HKLM "Software\${MUI_PRODUCT}" "Installer Language" $LANGUAGE
  518. WriteUninstaller "$INSTDIR\Uninstall.exe"

  519. SectionEnd

  520. ;==============================
  521. ; 7.8 显示“完成”标头

  522. ;如果不想使用“完成”页面,在这个巨集之后插入。

  523. !insertmacro MUI_SECTIONS_FINISHHEADER

  524. ;=======================================================
  525. ; ■8.描述功能
  526. ;=======================================================
  527. ;==============================
  528. ; 8.1 描述功能的巨集 (* 进阶)
  529. ;
  530. ; 如果有描述,最好一个一个加入巨集。
  531. ; 这一段要在所有的 section 之后,否则会出现“变数名称没有找到”。
  532. ; 如果 MUI_FUNCTIONS_DESCRIPTION_BEGIN 拆成两段,会变成重覆呼叫,而导致错误。

  533. !insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
  534. !insertmacro MUI_DESCRIPTION_TEXT ${SecMDaemon} $(DESC_SecMDaemon)
  535. !insertmacro MUI_DESCRIPTION_TEXT ${SecMDaemonDocs} $(DESC_SecMDaemonDocs)
  536. !insertmacro MUI_DESCRIPTION_TEXT ${SecWorldClient} $(DESC_SecWorldClient)
  537. !insertmacro MUI_DESCRIPTION_TEXT ${SecWebConfig} $(DESC_SecWebConfig)
  538. !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(DESC_SecStartMenu)
  539. ; !insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(DESC_SecQuicklaunch)
  540. !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop)
  541. !insertmacro MUI_DESCRIPTION_TEXT ${SecCreateUninst} $(DESC_SecCreateUninst)
  542. ; !insertmacro MUI_DESCRIPTION_TEXT ${SecRightMouse} $(DESC_SecRightMouse)
  543. !insertmacro MUI_FUNCTIONS_DESCRIPTION_END
  544. ;
  545. ;==============================
  546. ; 8.2 每个节段的描述文字,直接使用各国语言 (* 进阶)
  547. ;
  548. ; 这是让滑鼠移动到安装项目上时,自动出现的描述功能。
  549. ; 我使用 ENU/CHT/CHS 三个语言。如果嫌麻烦,可以只使用一个语言,甚至不使用描述。

  550. LangString DESC_SecMDaemon ${LANG_ENGLISH} "MDaemon Server Main Prog"
  551. LangString DESC_SecMDaemonDocs ${LANG_ENGLISH} "Related Documents, manuals"
  552. LangString DESC_SecWorldClient ${LANG_ENGLISH} "Server: reading your emails on browser"
  553. LangString DESC_SecWebConfig ${LANG_ENGLISH} "config server on browser"
  554. LangString DESC_SecStartMenu ${LANG_ENGLISH} "Add icon to Start Menu"
  555. LangString DESC_SecQuicklaunch ${LANG_ENGLISH} "Add icon to QuickLaunch"
  556. LangString DESC_SecDesktop ${LANG_ENGLISH} "Add icon to Desktop"
  557. LangString DESC_SecRightMouse ${LANG_ENGLISH} "Add function of mouse right-click"
  558. LangString DESC_SecCreateUninst ${LANG_ENGLISH} "Create Uninstaller"

  559. LangString DESC_SecMDaemon ${LANG_TRADCHINESE} "MDaemon 伺服器主程式"
  560. LangString DESC_SecMDaemonDocs ${LANG_TRADCHINESE} "相关的文件、手册"
  561. LangString DESC_SecWorldClient ${LANG_TRADCHINESE} "浏览器网页读取信件的伺服器"
  562. LangString DESC_SecWebConfig ${LANG_TRADCHINESE} "在浏览器组态伺服器"
  563. LangString DESC_SecStartMenu ${LANG_TRADCHINESE} "加入图示到开始功能表"
  564. LangString DESC_SecQuicklaunch ${LANG_TRADCHINESE} "加入图示到快速启动列"
  565. LangString DESC_SecDesktop ${LANG_TRADCHINESE} "加入图示到桌面"
  566. LangString DESC_SecRightMouse ${LANG_TRADCHINESE} "加入滑鼠右键功能"
  567. LangString DESC_SecCreateUninst ${LANG_TRADCHINESE} "建立解除安装程式"

  568. LangString DESC_SecMDaemon ${LANG_SIMPCHINESE} "MDaemon 督昢け;翋最唗"
  569. LangString DESC_SecMDaemonDocs ${LANG_SIMPCHINESE} "眈寿腔恅璃﹜忒聊"
  570. LangString DESC_SecWorldClient ${LANG_SIMPCHINESE} "銡拟け;厍珜黍?;蛔璃腔督昢け;"
  571. LangString DESC_SecWebConfig ${LANG_SIMPCHINESE} "婓銡拟け;餍离督昢け;"
  572. LangString DESC_SecStartMenu ${LANG_SIMPCHINESE} "氖楼芞梓善※羲宎§粕等"
  573. LangString DESC_SecQuicklaunch ${LANG_SIMPCHINESE} "氖楼芞梓善办厒ぎ;雄蹈"
  574. LangString DESC_SecDesktop ${LANG_SIMPCHINESE} "氖楼芞梓善袤拨"
  575. LangString DESC_SecRightMouse ${LANG_SIMPCHINESE} "氖楼扷梓衵莹髡夔"
  576. LangString DESC_SecCreateUninst ${LANG_SIMPCHINESE} "斐膘贱壶假蚾最唗"

  577. ;=======================================================
  578. ; ■9.解除安装程式,真正的动作
  579. ;=======================================================
  580. ; 这个部分,和前面的建立 CreateUninst ,意味不一样喔。
  581. ; 前者: 把 uninstaller 程式做出来。
  582. ; 后者: 指定这个程式,要删除那些档案/目录/注册表项。
  583. ;==============================
  584. ; 9.1 节段开始

  585. Section "Uninstall"

  586. ; 要移除掉解除安装程式
  587. Delete "$INSTDIR\Uninstall.exe"
  588. ; 移除档案
  589. Delete "$INSTDIR\App\*.*"
  590. Delete "$INSTDIR\Logs\*.*"
  591. Delete "$INSTDIR\docs\api\CreateUser\*.*"
  592. Delete "$INSTDIR\docs\api\IterateUsers\*.*"
  593. Delete "$INSTDIR\docs\api\Sample COM\MDUserEdit\*.*"
  594. Delete "$INSTDIR\docs\api\Sample COM\*.*"
  595. Delete "$INSTDIR\docs\api\*.*"
  596. Delete "$INSTDIR\docs\*.*"
  597. Delete "$INSTDIR\cgi\*.*"
  598. Delete "$INSTDIR\ARCHIVES\*.*"
  599. Delete "$INSTDIR\BACKUP\*.*"
  600. Delete "$INSTDIR\BADMSGS\*.*"
  601. Delete "$INSTDIR\CFILTER\*.*"
  602. Delete "$INSTDIR\DIGESTS\*.*"
  603. Delete "$INSTDIR\GATEWAYS\*.*"
  604. Delete "$INSTDIR\LOCALQ\LNDOMAIN\*.*"
  605. Delete "$INSTDIR\LOCALQ\*.*"
  606. Delete "$INSTDIR\LOGS\*.*"
  607. Delete "$INSTDIR\PUBLIC~1\*.*"
  608. Delete "$INSTDIR\RAWFILES\*.*"
  609. Delete "$INSTDIR\REMOTEQ\RETRY\*.*"
  610. Delete "$INSTDIR\REMOTEQ\*.*"
  611. Delete "$INSTDIR\SMTPIN\*.*"
  612. Delete "$INSTDIR\WCstandard\HTML\help\*.*"
  613. Delete "$INSTDIR\WCstandard\HTML\*.*"
  614. Delete "$INSTDIR\WCstandard\Temp\*.*"
  615. Delete "$INSTDIR\WCstandard\Templates\*.*"
  616. Delete "$INSTDIR\WCstandard\*.*"
  617. Delete "$INSTDIR\webconfig\HTML\*.*"
  618. Delete "$INSTDIR\webconfig\Temp\*.*"
  619. Delete "$INSTDIR\webconfig\Templates\*.*"
  620. Delete "$INSTDIR\webconfig\*.*"
  621. Delete "$INSTDIR\*.*"

  622. ; 移除开始功能表、桌面、快递启动等捷径。
  623. Delete "$SMPROGRAMS\${MUI_PRODUCT}\*.*"
  624. Delete "$DESKTOP\${MUI_PRODUCT}.lnk"
  625. Delete "$QUICKLAUNCH\${MUI_PRODUCT}.lnk"
  626. RMDir "$SMPROGRAMS\${MUI_PRODUCT}"

  627. ; 移除使用过的目录。
  628. RMDir "$INSTDIR\App"
  629. RMDir "$INSTDIR\Logs"
  630. RMDir "$INSTDIR\docs\api\CreateUser"
  631. RMDir "$INSTDIR\docs\api\IterateUsers"
  632. RMDir "$INSTDIR\docs\api\Sample COM\MDUserEdit"
  633. RMDir "$INSTDIR\docs\api\Sample COM"
  634. RMDir "$INSTDIR\docs\api"
  635. RMDir "$INSTDIR\docs"
  636. RMDir "$INSTDIR\cgi"
  637. RMDir "$INSTDIR\ARCHIVES"
  638. RMDir "$INSTDIR\BACKUP"
  639. RMDir "$INSTDIR\BADMSGS"
  640. RMDir "$INSTDIR\CFILTER"
  641. RMDir "$INSTDIR\DIGESTS"
  642. RMDir "$INSTDIR\GATEWAYS"
  643. RMDir "$INSTDIR\LOCALQ\LNDOMAIN"
  644. RMDir "$INSTDIR\LOCALQ"
  645. RMDir "$INSTDIR\LOGS"
  646. RMDir "$INSTDIR\PUBLIC~1"
  647. RMDir "$INSTDIR\RAWFILES"
  648. RMDir "$INSTDIR\REMOTEQ\RETRY"
  649. RMDir "$INSTDIR\REMOTEQ"
  650. RMDir "$INSTDIR\SMTPIN"
  651. RMDir "$INSTDIR\WCstandard\HTML\help"
  652. RMDir "$INSTDIR\WCstandard\HTML"
  653. RMDir "$INSTDIR\WCstandard\Temp"
  654. RMDir "$INSTDIR\WCstandard\Templates"
  655. RMDir "$INSTDIR\WCstandard"
  656. RMDir "$INSTDIR\webconfig\HTML"
  657. RMDir "$INSTDIR\webconfig\Temp"
  658. RMDir "$INSTDIR\webconfig\Templates"
  659. RMDir "$INSTDIR\webconfig"
  660. RMDir "$INSTDIR"

  661. ; 删除 windows 注册表之中的安装路径
  662. DeleteRegKey HKLM SOFTWARE\${MUI_PRODUCT}

  663. ; 删除 windows 注册表的解除安装
  664. DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"

  665. ; 删除 uninstaller 使用的语言名称 (* 进阶)
  666. DeleteRegvalue HKLM "Software\${MUI_PRODUCT}" "Installer Language"

  667. ;显示“完成”标头 (* 进阶)
  668. !insertmacro MUI_UNFINISHHEADER

  669. SectionEnd

  670. ;==============================
  671. ; 9.2 解除安装程式,初始化函式动作 (* 进阶)

  672. Function un.onInit

  673. ;从注册表取得语言名称
  674. ReadRegStr $LANGUAGE HKLM "Software\${MUI_PRODUCT}" "Installer Language"

  675. FunctionEnd
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-19 15:32 , Processed in 0.141273 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表