nsis 学习笔记(2)
nsis 学习笔记(2)
Delete "$SMPROGRAMS\裝箱大師企業版\裝箱大師官方網站.lnk"
Delete "$SMPROGRAMS\裝箱大師企業版\裝箱大師企業版幫助文檔.lnk"
delete "$smprograms\裝箱大師企業版\裝箱大師企業版4.0.lnk"
Delete "$SMPROGRAMS\裝箱大師企業版\裝箱大師企業版卸載.lnk"
delete "$desktop\裝箱大師企業版4.0.lnk"
RMDir "$INSTDIR"
RMDir "$SMPROGRAMS\裝箱大師企業版"
SetAutoClose tr
${endif}
sectionend
Function un.onInit
ReadRegStr $5 HKLM software\LoadMaster "lang ge"
${if} $5 = 2052
MessageBox MB_ICONQ STION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 装箱大师企业版 ,及其所有的组件?" IDYES goo
Abort
${endif}
${if} $5 = 1028
messagebox MB_ICONQ STION|mb_yesno|MB_DEFBUTTON2 "您確實要完全移除 裝箱大師企業版 ,及其所有的組件?" IDYES goo
abort
${endif}
${if} $5 = 1033
messagebox MB_ICONQ STION|mb_yesno|MB_DEFBUTTON2 "Are you sure you want to completely remove the software, and all its components ?" IDYES goo
abort
goo:
${endif}
FunctionEnd
Function un.onUninstS cess
HideWindow
${if} $5 = 2052
MessageBox MB_ICONINFORMATION|MB_OK "装箱大师企业版 已成功地从您的计算机移除。"
${endif}
${if} $5 = 1028
messagebox MB_ICONINFORMATION|MB_OK "裝箱大師企業版 已成功地從您的計算機移除。"
${endif}
${if} $5 = 1033
messagebox MB_ICONINFORMATION|MB_OK " The software have been s cessfully removed"
${endif}
FunctionEnd
打开开始菜单,依次找到所有程序、附件、系统工具、任务计划。打开后,点击添加任务计划,“下一步”后,点击“浏览”,在窗口中找到C:\WINDOWS\system32\shutdown.exe并打开,然后根据自己的需要选择关机的频率(如果是每天同一个时间,就选择“每天”),然后“下一步”,选择自己需要的关机时间,接着“下一步”,输入用户密码进行确认(执行的用户一定要有密码,没有的话无法执行。没有密码可以到控制面板的用户帐户中为自己的账户设置一个密码),用户密码确认后,“下一步”,选中“在单击完成时,打开此任务的高级属性”,点击“完成”。最后在弹出的窗口的“任务”选项卡中的“运行”中输入
C:\WINDOWS\system32\shutdown.exe -s -t 60 -c “aa”
t后面是关机的倒计时时间,单位为秒;c后面的是关机时提示的内容,可以自己设定。注意:-s、-t、-c以及它们的内容之间都有一个空格,一定要有,不能少的!
楼主可以参考一下我的关机设定
我关机的是:
C:\WINDOWS\system32\shutdown.exe -s -t 60 -c “系统即将关机,请保存所有文件资料并退出程序!”
如果楼主在设定中出现如下提示:已创建新任务,但可能不能运行,因为无法设置帐号信息.指定的错误是:0x80041315:任务计划程序服务没有运行。那就说明你的任务计划服务在优化系统的时候被关了。你需要到控制面板的管理工具中打开“服务”,然后找到Task Scheduler,将它设置为“自动”,然后启用它。这样就一切OK
outfile "LoadMaster_Enterprise_Setup.exe"
!incl? "mui.nsh"
page license
page directory
page instfiles
loadlang gefile "D:\Program Files\NSIS\Contrib\Lang ge files\TradChinese.nlf"
loadlang gefile "D:\Program Files\NSIS\Contrib\Lang ge files\simpChinese.nlf"
loadlang gefile "D:\Program Files\NSIS\Contrib\Lang ge files\English.nlf"
icon f:\t \LD.ico
;InstallButtonText 安装
InstallDir $programfiles\LoadMaster
InstallDirRegKey HKLM Software\loadmaster path
;LicenseData f:\cnLicence.txt
LicenseLangString ln ${LANG_SIMPCHINESE} f:\cnlicence.txt
LicenseLangString ln ${LANG_ENGLISH} f:\enlicence.txt
LicenseLangString ln ${LANG_TRADCHINESE} f:\tnlicence.txt
LicenseData $(ln)
;LicenseData /LANG=${LANG_ENGLISH} "f:\enlicence.txt"
;LicenseData /LANG=${LANG_SIMPCHINESE} "f:\cnlicense.txt"
;LicenseData /LANG=${LANG_TRADCHINESE} "f:\tnlicense.txt"
;InstallDirRegKey HKLM software\loadmaster 11
BrandingText "http://www.zh ngxiang.com/"
section
strcpy $0 $lang ge
messagebox MB_OK "$0"
sectionend
Name $(Name)
LangString Name ${LANG_ENGLISH} "LoadMaster_Enterprise"
LangString Name ${LANG_SIMPCHINESE} "装箱大师企业版"
;Section
;${switch} $0
;${Case} 2052
;call sc
; ${Break}
; ${Case} 1033
;call ec
; ${Break}
; sectionend
;scn:
;caption 装箱大师企业版
;function ec
;caption LoadMaster_Enterprise
;functionend
;CompletedText 你已经完成装箱大师的安装
section
setoutpath $INSTDIR
file f:\t \pic.bmp
WriteRegStr HKLM software\loadmaster version "4.0"
writeregstr HKLM software\loadmaster path "$INSTDIR"
;messagebox MB_OK ${LANG_TRADCHINESE}
;messagebox MB_OK ${lang_simpchinese}
;messagebox MB_OK ${LANG_ENGLISH}
;messagebox MB_OK $lang ge
sectionend
;CheckBitmap f:\t \pic2.bmp
Section "MainSection"
SetOutPath "$INSTDIR"
CreateDirectory "$SMPROGRAMS\装箱大师企业版"
CreateShortCut "$SMPROGRAMS\装箱大师企业版\装箱大师企业版4.0.lnk" "$INSTDIR\LoadMasterMain.exe"
CreateShortCut "$DESKTOP\装箱大师企业版4.0.lnk" "$INSTDIR\LoadMasterMain.exe"
setoutpath $INSTDIR
file /r "f:\abc\*.*"
;file /r "f:\workspace2\*.*"
;setoutpath $INSTDIR
;ExecWait '"$INSTDIR\vcredist_x86.exe"'
SectionEnd
function .onInit
Push ""
Push ${LANG_ENGLISH}
push "English"
push ${LANG_TRADCHINESE}
Push "Traditional Chinese"
Push ${LANG_SIMPCHINESE}
Push "Simplified Chinese"
Push A ; A means auto count lang ges
; for the auto count to work the first empty push (Push "") must remain
LangDLL::LangDialog "Installer Lang ge" "Please select a lang ge $\n 请选择语言 $\n 請選擇語言 "
Pop $LANG GE
; messagebox MB_OK "$LANG GE"
; messagebox MB_OK "$A"
StrCmp $LANG GE "cancel" 0 +2
Abort
FunctionEnd
!define VER_1 4 ;软体版本号码 1 ,如 E ora 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_PROD T "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_PROD T}"
;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_PROD T}"
;显示中文化标题,依 ENU/CHT/CHS 语言的不同。
CAPTION /LANG=1033 "${MUI_PROD T} ${MUI_VERSION} ${PATCHTYPE_ENU}"
CAPTION /LANG=1028 "${MUI_PROD T} ${MUI_VERSION} ${PATCHTYPE_CHT}"
CAPTION /LANG=2052 "${MUI_PROD T} ${MUI_VERSION} ${PATCHTYPE_CHS}"
;==========================
; 3.2 载入 Modern UI 系统
!incl? "${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_LANG GE "English"
!insertmacro MUI_LANG GE "SimpChinese"
!insertmacro MUI_LANG GE "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 Lang ge" "Please select a lang ge."
; 上面这一句,不要中文化。除非你想让老外看到乱码。
Pop $LANG GE
StrCmp $LANG GE "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 .onInstS cess
;==============================
; 5.2 安装完成后,执行 ExecShell
;
; 视个人需要而定,我只用在 E ora 安装而已。
; ;------------------------------------------
; !macro MUI_INSTS CESS1 LANGID TEXT
;
; StrCmp $LANG GE ${LANGID} "" +3
; MessageBox MB_YESNO|MB_ICONQ STION "${TEXT}" IDNO Nomapi
; ExecShell open '$INSTDIR\SWMAPI.EXE'
; !macroend
; ;------------------------------------------;
; 下列是 ENU/CHT/CHS 三个语言的动作。
;
; !insertmacro MUI_INSTS CESS1 1033 "Do you want to install ${NAME} as a default mailer? It will excute MAPI installer."
; !insertmacro MUI_INSTS CESS1 1028 "你想要安装 ${NAME} 做为预设信件程式吗?将执行外部 MAPI 安装程式。"
; !insertmacro MUI_INSTS CESS1 2052 "斓砑猁假蚾 ${NAME} 酕峈苏?;蛔璃最唗镉ˋ蔚堍俴俋窒 MAPI 假蚾最唗﹝"
; Nomapi:
;==============================
; 5.3 安装后,要求使用者读取 README 档案
; ;------------------------------------------
; !macro MUI_INSTS CESS2 LANGID TEXT README
; StrCmp $LANG GE ${LANGID} "" +3
; MessageBox MB_YESNO|MB_ICONQ STION "${TEXT}" IDNO NoReadme
; ExecShell open notepad '$INSTDIR\${README}'
; !macroend
; ;------------------------------------------
; 下列是 ENU/CHT/CHS 三个语言的动作。
; !insertmacro MUI_INSTS CESS2 1033 "Setup has been completed s cessfully . Press [Yes] to contin README file." "${README_ENU}"
; !insertmacro MUI_INSTS CESS2 1028 "安装已成功地完成。按下 [Yes] 继续读取 README 档案。" "${README_CHT}"
; !insertmacro MUI_INSTS CESS2 2052 "假蚾眒伧髡华俇伧﹝偌狟 [Yes] 樟哿黍?; README 恅璃﹝" "${README_CHS}"
; NoReadme:
;==============================
; 5.4 函式定义结束
FunctionEnd
;=======================================================