初次接触NSIS打包工具还是在最近不久哈,感觉非常好用。大家在google中搜索nsis即可看到其官网,公司总打不开,郁闷~~
其教程及语法也有很多,网上一搜一大堆,在下面也会附上搜到的一篇。个人感觉其插件非常强大,其中最常用的功能莫过于统计安装软件的数量及加密,稍后也会附上我写的一个,当然官网插件中也有实例。
有一个叫《NSIS图文教程集锦.chm》的不错,具体下载链接网上有。
下面转载了一篇不错的文章:
NSIS制作安装文件全攻略(http://jazka.blog.51cto.com/809003/218414)
NSIS 大体布局如下:
一个示例脚本; study.nsi;; 以下脚本用以生成 study.exe 文件; 它包含有授权协议;; 安装时若发现应用程序正在运行,安装程序会提示并替用户关闭应用程序; 安装成功后会自动运行应用程序;; 启用新的 Modern UI 的宏指令语法,原先的部分指令将被禁止以防止重复; 我会尽量展示如何基本指令的用法。当然宏指令也会与一些基本指令发生重; 复定义的情况,不过 NSIS 照样能编译成功.; 其中的一些路径、文件你可以根据需要更改; 启用外部压缩工具(这里我们不用,原因看第 10 步);!define HAVE_UPX; 若启用了外部压缩工具,这进行可执行文件头的压缩!ifdef HAVE_UPX; 用 UPX 压缩可执行文件头(用其他的相关工具也行)!packhdr tmp.dat "E:UPXupx --best tmp.dat"!endif; 编译选项; 设置覆盖标记SetOverwrite on; 设置压缩选项SetCompress auto; 选择压缩方式SetCompressor bzip2; 设置数据块优化SetDatablockOptimize on; 设置数据写入时间SetDateSave on; 相关数据预设; 软件的名字,后面的${NAME}调用这个名字!define NAME "NSIS"!define NAME_FULL "全方位掌握 NSIS 的使用"!verbose 3; 包含窗口消息定义文件!include "${NSISDIR}ExamplesWinMessages.nsh"; 包含新界面的宏指令文件!include "${NSISDIR}ExamplesModern UIModernUI.nsh"; 包含标牌位图宏指令文件!include "${NSISDIR}Examplesbranding.nsh"!verbose 4!define CURRENTPAGE $9!define TEMP1 $R0!define TEMP2 $R1; 插入安装界面宏定义(这里我禁用了,启用也没问题。编译照样通过。后面我都定义过了);!insertmacro MUI_INTERFACE "modern2.exe" "adni18-installer-C-no48xp.ico" "adni18-uninstall-C-no48xp.ico" "modern.bmp" "smooth"; 安装程序设置; 输出文件OutFile "F:study.exe"; 安装程序名称Name /LANG=2052 "NSIS"; 替换对话框样式ChangeUI all "${NSISDIR}ContribUIsmodern2.exe"; 启用 WindowsXP 的视觉样式XPstyle on;设置字体SetFont 宋体 9; 标题名称Caption /LANG=2052 "全方位掌握 NSIS 的使用"; 标牌的内容BrandingText /LANG=2052 /TRIMCENTER "Shao Hao"; 安装程序图标Icon "F:12QCDIcon.ico"; 安装程序显示标题WindowIcon on; 添加标牌位图(放在顶部用 TOP 参数。后面接高度)AddBrandingImage LEFT 105; 设定渐变背景BGGradient off; 设置安静安装模式;SilentInstall normal; 设置安静卸载模式;SilentUnInstall normal; 执行 CRC 检查(最好用 on 打开。关闭是因为还要修改安装程序,看第 10 步)CRCCheck off; 加载相应的语言文件LoadLanguageFile "${NSISDIR}ContribLanguage filesSimpChinese.nlf"; 替换各个对话框标题的文字SubCaption /LANG=2052 0 "授权协议"SubCaption /LANG=2052 1 "安装选项"SubCaption /LANG=2052 2 "安装目录"SubCaption /LANG=2052 3 "正在安装"SubCaption /LANG=2052 4 "完成安装"; 替换默认按钮的文字MiscButtonText /LANG=2052 "< 上一步" "下一步 >" "取消" "关闭"; 替换“安装”按钮的文字;InstallButtonText /LANG=2052 "安装"; 替换当文件无法被写入时的警告窗的文字FileErrorText /LANG=2052 "无法写入文件$r$n$0$r$n请确认文件属性不是只读且未被使用中!"; 默认的安装目录InstallDir "$PROGRAMFILESQCD 3"; 如果可能的化从注册表中监测安装路径InstallDirRegKey HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS" "UninstallString"; 授权协议页面LicenseText /LANG=2052 "NSIS 是免费软件。安装前请先阅读以下协议条款" "我同意"; 使用授权协议文本LicenseData /LANG=2052 "F:12License.txt"; 设置授权协议页面的背景色;LicenseBkColor 000000; 选择要按安装的组件ComponentText /LANG=2052 "现在将安装 ${NAME_FULL}到您的计算机:" "请选择安装类型" "或选择您希望安装的组件"InstType "完全安装(都在了)"InstType "典型安装"InstType /LANG=2052 /CUSTOMSTRING=自定义?;InstType /LANG=2052 /NOCUSTOM;InstType /COMPONENTSONLYONCUSTOMCheckBitmap "${NSISDIR}ContribIconsmodern.bmp"; 替换显示磁盘空间信息的文字SpaceTexts /LANG=2052 "所需空间:" "可用空间:"; 提示用户输入目录的文本; DirShow hide; 替换显示选择安装目录的文字DirText /LANG=2052 "请选择 ${NAME} 的安装路径:" "选择目录用以安装 ${NAME}:" "浏览..."; 是否允许安装在根目录下AllowRootDirInstall false; 安装信息的颜色;InstallColors 000000 FFFFFF; 安装进度条显示方式InstProgressFlags smooth colored; 完成后自动关闭安装程序AutoCloseWindow true; 显示“显示详细细节”对话框ShowInstDetails hide; 替换“显示细节”按钮的文字DetailsButtonText /LANG=2052 "显示细节"; 替换“完成”按钮的文字CompletedText /LANG=2052 "已完成"; 卸载程序设置; 替换卸载程序的文字UninstallText /LANG=2052 "现在将从你的系统中卸载 ${NAME}:" "卸载目录:"; 卸载程序图标UninstallIcon "F:12UnQCDIcon.ico"; 替换卸载程序标题的文字UninstallCaption /LANG=2052 "卸载 ${NAME}"; 替换卸载程序每页按钮的文字UninstallSubCaption /LANG=2052 0 ":确认"UninstallSubCaption /LANG=2052 1 ":正在删除文件"UninstallSubCaption /LANG=2052 2 ":完成"; 卸载程序显示方式ShowUninstDetails hide; 替换“卸载”按钮的文字UninstallButtonText /LANG=2052 "卸载"; 安装程序内容及其相关的回调函数; 安装程序内容Section /e "!主要程序(必须安装)" SecCoreSectionIn 1 2 RO; 设置输出路径,每次使用都会改变SetOutPath $INSTDIR; 循环包含目录下全部内容File /r "F:121*.*"; 只包含一个文件File "F:12gf.gif"; 处理动态连接库文件IfFileExists "$INSTDIR1.dll" 0 NoFile1; 取消组件注册UnRegDll "$INSTDIR1.dll"Delete "$INSTDIR1.dll"NoFile1:File "F:121.dll"; 注册组件RegDLL "$INSTDIRQCDIconMgr.dll"; 写入软件注册键值WriteRegStr HKLM "SoftwareNSISNSIS" "" "$INSTDIR"; 为 Windows 卸载程序写入键值WriteRegStr HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS" "DisplayName" "NSIS(只用于移除)"WriteRegStr HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS" "UninstallString" '"$INSTDIRuninst.exe"'; 写入生成卸载程序(可多次使用)WriteUninstaller "$INSTDIRuninst.exe"SectionEndSection /e "扩展(可选)" SecUpdateSectionIn 1SetOutPath "$INSTDIRPlugins"File "F:12qcdplusPlugins2.dll"File /r "F:12qcdplusPlugins3"SectionEndSubSection /e "选项" SecOptionsSection /e "创建桌面图标" SecDesktopShortCutSectionIn 1 2SetOutPath "$INSTDIRPlugins"CreateShortCut "$DESKTOPNSIS.lnk" "$INSTDIRgf.gif"WriteUninstaller "$INSTDIRuninst.exe"SectionEndSection /e "创建快速启动栏图标" SecQuickbarShortCutSectionIn 1 2SetOutPath "$INSTDIRPlugins"CreateShortCut "$QUICKLAUNCHNSIS.lnk" "$INSTDIRgf.gif"WriteUninstaller "$INSTDIRuninst.exe"SectionEndSection /e "创建 NSIS 程序组" SecShortCutGroupSectionIn 1 2SetOutPath "$INSTDIRPlugins"CreateDirectory "$SMPROGRAMSNSIS"CreateShortCut "$SMPROGRAMSQCD Playergf.lnk" "$INSTDIRgf.gif"WriteUninstaller "$INSTDIRuninst.exe"SectionEndSubSectionEndSection "-Run"; 运行?ExecWait '"$INSTDIR2.exe" -p'WriteINIStr "$INSTDIRNSIS.ini" "2" "Language" "Chinese"Exec "$INSTDIR2.exe"ExecShell open "$INSTDIR汉化说明.htm"SectionEndSection "";Invisible section to display the Finish header!insertmacro MUI_FINISHHEADER SetHeaderSectionEnd; 安装程序初始化设置Function .onInit; 发现有程序正在运行时提示退出后继续运行loop:FindWindow $R0 "NSIS"IntCmp $R0 0 doneMessageBox MB_OKCANCEL "NSIS 正在运行。$n点击“确定”按钮会关闭 NSIS 然后继续安装,点击“取消”按钮将退出安装程序" IDOK NoAbortAbortNoAbort:SendMessage $R0 1029 0 0; 稍等后继续检测直至检测不到或用户选择取消Sleep 444Goto loopdone:; 显示 Logo 画面SetOutPath $TEMPFile /oname=qcd_logo.bmp "F:12logo.bmp"File /oname=magiclime.exe "${NSISDIR}Binmagiclime.exe"ExecWait '"$TEMPmagiclime.exe" qcd_logo.bmp'Delete "$TEMPmagiclime.exe"Delete "$TEMPqcd_logo.bmp"; 初始化标牌位图!insertmacro BI_INIT $R0FunctionEnd; 安装程序主界面的相关文本Function SetHeader!insertmacro MUI_HEADER_INIT!insertmacro MUI_HEADER_START 1!insertmacro MUI_HEADER_TEXT 2052 "授权协议" "安装 ${NAME} 之前,请认真阅读一下授权条款."!insertmacro MUI_HEADER_STOP 1!insertmacro MUI_HEADER_START 2!insertmacro MUI_HEADER_TEXT 2052 "选择组件" "请选择你要安装的组件."!insertmacro MUI_HEADER_STOP 2!insertmacro MUI_HEADER_START 3!insertmacro MUI_HEADER_TEXT 2052 "选择安装位置" "为 ${NAME} 选择一个安装目录."!insertmacro MUI_HEADER_STOP 3!insertmacro MUI_HEADER_START 4!insertmacro MUI_HEADER_TEXT 2052 "安装" "${NAME} 已经安装,请等待."!insertmacro MUI_HEADER_STOP 4!insertmacro MUI_HEADER_START 5!insertmacro MUI_HEADER_TEXT 2052 "完成" "安装顺利完成."!insertmacro MUI_HEADER_STOP 5!insertmacro MUI_HEADER_ENDFunctionEnd; 初始化安装程序对话框的显示文本Function .onInitDialog!insertmacro MUI_INNERDIALOG_INIT!insertmacro MUI_INNERDIALOG_START 1!insertmacro MUI_INNERDIALOG_TEXT 2052 1040 "如果你同意协议中的所有条款,选择“我同样”继续安装,如果你选择了“取消”,安装程序将终止,只有接受条款才能安装 ${NAME}."!insertmacro MUI_INNERDIALOG_STOP 1!insertmacro MUI_INNERDIALOG_START 2!insertmacro MUI_INNERDIALOG_TEXT 2052 1042 "描述"!insertmacro MUI_INNERDIALOG_TEXT 2052 1043 "移动你的鼠标到组件上,便可以见到相关的描述."!insertmacro MUI_INNERDIALOG_STOP 2!insertmacro MUI_INNERDIALOG_START 3!insertmacro MUI_INNERDIALOG_TEXT 2052 1041 "目标文件夹"!insertmacro MUI_INNERDIALOG_STOP 3!insertmacro MUI_INNERDIALOG_ENDFunctionEnd; 转到下页面时的处理Function .onNextPage!insertmacro MUI_NEXTPAGE_OUTER!insertmacro MUI_NEXTPAGE SetHeader; 标牌位图设置!insertmacro BI_NEXTFunctionEnd; 转到上一页面时的处理Function .onPrevPage!insertmacro MUI_PREVPAGE; 标牌位图设置!insertmacro BI_PREVFunctionEnd; 鼠标移到指定组件时的显示处理Function .onMouseOverSection; 用宏指令设置安装自己的注释文本!insertmacro MUI_DESCRIPTION_INIT!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecCore} "安装主应用程序"!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecUpdate} "安装 NSIS 的更新或新增插件"!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecOptions} "选择 NSIS 的其他安装选项,例如:创建快捷方式和应用程序组的"!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecDesktopShortCut} "在用户的桌面上创建 NSIS 的快捷方式"!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecQuickbarShortCut} "在用户的快速栏里创建 NSIS 快捷方式"!insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecShortCutGroup} "在用户的开始菜单的程序中创建 NSIS 的快捷方式组"!insertmacro MUI_DESCRIPTION_ENDFunctionEnd; 安装成功完成后的设置Function .onInstSuccess; 自己加吧:)FunctionEnd; 放弃安装时警告窗口的显示信息Function .onUserAbort!insertmacro MUI_ABORTWARNING 2052 "你确定要推出 ${NAME} 的安装吗?"!insertmacro MUI_ABORTWARNING_ENDFunctionEnd; 安装程序标牌位图列表!insertmacro BI_LIST!insertmacro BI_LIST_ADD "F:12Brand1.bmp" /RESIZETOFIT!insertmacro BI_LIST_ADD "F:12Brand2.bmp" /RESIZETOFIT!insertmacro BI_LIST_ADD "F:12Brand3.bmp" /RESIZETOFIT!insertmacro BI_LIST_END; 卸载程序及其相关回调函数; 卸载程序内容Section "Uninstall"ExecWait '"$INSTDIR12.exe" /un'; 循环删除文件直至删除文件夹RMDir /r "$SMPROGRAMSNSIS"UnRegDLL "$INSTDIR2.dll"Delete "$INSTDIRQCDIconMgr.dll"Delete "$INSTDIR*.*"DeleteRegKey HKLM "SoftwareNSIS"DeleteRegKey HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstallNSIS"MessageBox MB_YESNO|MB_ICONQUESTION "是否连插件目录也要删除?$n(若您要保留这些文件,请点击下面的“否”按钮)" IDNO NoDelete; 全删光!!!RMDir /r "$INSTDIR"NoDelete:SectionEnd; 定义卸载程序标牌位图!define BI_UNINSTALL!include "${NSISDIR}Examplesbranding.nsh"; 初始化卸载程序对话框的设置Function un.onInit; 初始化标牌位图!insertmacro BI_INIT $R0FunctionEnd; 卸载程序主界面的相关文本Function un.SetHeader!insertmacro MUI_HEADER_INIT!insertmacro MUI_HEADER_START 1!insertmacro MUI_HEADER_TEXT 2052 "卸载 ${NAME}" "${NAME_FULL} 将从你的系统里移除."!insertmacro MUI_HEADER_STOP 1!insertmacro MUI_HEADER_START 2!insertmacro MUI_HEADER_TEXT 2052 "卸载" "${NAME} 正在被卸载,请等待."!insertmacro MUI_HEADER_STOP 2!insertmacro MUI_HEADER_START 3!insertmacro MUI_HEADER_TEXT 2052 "完成" "${NAME_FULL} 已从你的系统中移除."!insertmacro MUI_HEADER_STOP 3!insertmacro MUI_HEADER_ENDFunctionEnd; 初始化卸载程序对话框时的处理Function un.onInitDialog; 自己加:)FunctionEnd; 卸载程序转到下一页时的处理Function un.onNextPage!insertmacro MUI_NEXTPAGE_OUTER!insertmacro MUI_NEXTPAGE un.SetHeader; 标牌位图设置!insertmacro BI_NEXTFunctionEnd; 卸载程序完成时的处理Function un.onUninstSuccess; 再加^_^FunctionEnd; 放弃卸载程序时的处理Function un.onUserAbortFunctionEnd; 卸载程序标牌位图列表!insertmacro BI_LIST!insertmacro BI_LIST_ADD "F:12UnBrand1.bmp" /RESIZETOFIT!insertmacro BI_LIST_ADD "F:12UnBrand2.bmp" /RESIZETOFIT!insertmacro BI_LIST_END; 结束
nsis的inetc插件和md5dll插件(http://www.hao535.com/archives/200)
nsis一款很不错的打包工具,有大量的第三方插件可用,介绍两款非常不错的插件inetc和md5dll
inetc是模拟http协议插件,get、post方法是最常用的,下载地址:http://nsis.sourceforge.net/mediawiki/images/c/c9/Inetc.zip,下载解压后,将inetc.dll放到nsis的plugin目录。用法范例:
inetc::post "p1=1&p2=2" /noproxy /silent"http://www.xxx.com/post.php" "$INSTDIRok.htm"
简单讲就是将参数p1和p2提交到xxx.com/post.php页面,不详述。
md5dll看名字就知道是md5插件,下载地址:http://www.fdos.org/win32/nsis/plugins/md5dll/md5dll.0.5.zip,同样解压后,将md5dll.dll放到plugin目录,用法如下:
md5dll::GetMD5String "your password"
yourpassword是要哈希的字符串,尽量不要放中文或其他多字节字符,本身提供ansi和unicode两个dll文件,在没有特殊字符的情况下是没有区别的。
插件下载地址(http://www.121xia.com/soft/55898.htm)
插件介绍(http://blog.163.com/53_54/blog/static/6013812200702975044496/)
NSIS插件介绍
2007-01-2919:50:44|分类: 科技-> NSIS |标签:nsis|字号大中小订阅
A
AccessControl plug-in -- 存取控制插件,只适用于 Win2000或以上。
AnimGif plug-in--可以用来为安装页面上使用gif图片格式的插件,同时也支持静态bmp和jpeg格式
Arrays in NSIS--NSIS动态数组,数列插件
Application Association Registration plug-in
B
BDEAlias plug-in -- Borland BDE 数据库别名创建修改插件
Base64 plug-in
BattleTorrent plug-ins --BT 下载的插件
Blowfish plug-in
BrandingURL plug-in--把品牌文字变成点击超链接的插件
Builtin NSISdl plug-in
ButtonEvent plug-in -- 允许NSIS编码器增加一个自定义钮扣并且通过一个NSIS函数系到来控制它的插件。
C
CABSetup plug-in
CDRom plug-in-- 开/关CD-ROM 舱门;获取CD-ROM状态(准备好,尚未准备好);获取ready信息(卷标名,卷标数);
查找系统中所有CD-ROM (依靠Enumerate_CD-ROM_Drives 插件)
CPUDesc plug-in
CRCCheck plug-in
CabDLL plug-in-- 从 CAB 压缩包中抽取文件的插件
ChangeRes plug-in -- 改变屏幕分辨率,颜色数,刷新率的插件。
ChngVrbl plug-in
ComPlusAdmin plug-in-- COM+ 组件的添加删除插件
CreateMutex plug-in
Crypto plug-in-- 用来加密的插件,算法包括 MD5, SHA1, MD2,MD4,可加密文字,文件,呵呵,绝对可以作出
一个需要序列号的安装程序,即使别人有解包工具也需要懂得破解算法加密才行,否则只会得到
一堆乱码字节。
CustomLicense plug-in
D
DcryptDll plug-in
Dialogs plug-in -- 调用系统标准对话框插件,例如打开,保存等等的标准对话框。
Dirpage plug-in
DotNet plug-in
DumpLog plug-in
DumpState plug-in -- 可列出安装过程中变量,堆栈里面内容的插件,用来调试之用超一流。
E
EBanner plug-in
Email validation plug-in
EmbeddedLists plug-in
EnumCDs plug-in-- 列举当前可用的CD-ROM列表。
EnumINI plug-in
EventLog plug-in
ExDlg plug-in
ExLicensePage plug-in
ExecCmd plug-in
ExecDos plug-in-- 创建控制台环境运行DOS程序的插件。
ExecPri plug-in
ExtractDLL plug-in-- 解compressfile.exe 压缩的文件,在用 NSISdl插件制作在线升级程序时有用.只支持 zlib 算法。
ExtractDLLEx plug-in解compressfile.exe 压缩的文件,在用 NSISdl插件制作在线升级程序时有用支持 LZMA 算法。
F
FCT plug-in
FSP plug-in
FindProcDLL plug-in
Firewall-Disabler plug-in
FloatOP plug-in-- IntOp 只能操作整数,该插件就是为了解决浮点数运算问题的。
FontName plug-in
G
Games plug-in
GetVersion (Windows) plug-in--获取Windows版本信息的插件
GetFirstRemovableDrive plug-in
H
HandleFileDragDrop plug-in
HelpButton plug-in
HwInfo plug-in
I
IEFunctions plug-in
IP plug-in
InetLoad plug-in-- 类似NSISdl的下载插件,支持http 和ftp ,基于MS WinInetAPI,对于在线升级程序制作有一定用处。
Inetc plug-in-- 与InetLoad插件一样。用作于下载文件!比InetLoad 多了几个函数而已!
InstDrv plug-in
InstallOptionsEx plug-in-- 扩展自原 InstallOptions 插件,更多控件支持Animation(动画), ProgressBar(进度条),
TrackBar(位置调节),IPAddress(IP 输入), DateTime(日期时间编辑框), MonthCalendar
(日历), UpDown(上下调节), TreeView(树形结构视图框)。还有其他改进功能。
Internet plug-in-- 网络功能插件,取本地计算机的主机名,IP 地址,还有urls的状态代码.显示:404 代表urls 不存在。
K
KillProc plug-in-- 清除进程的插件,既然能检测出阻碍安装过程的进程当然少不了这个清除进程的东东啦。
KillProcDLL plug-in-- 功能与KillProc类似,清除进程的插件,根据返回值来执行清除命令.
L
Linker plug-in--一个来把label转化成一个超级链接的插件
Locate plugin
LockedList plug-in--用来显示或取得选者被卸载或覆盖文件的锁定程序列表插件
LogEx plug-in
M
MD5 plugin-- md5 插件,著名的校验算法插件,用来检验一个文件的版本是否对应的最好插件。
MSIBanner plug-in-- 一个仿效标准 MSI 安装程序(Windows Installer) banner的界面插件。
MSSQL OLEDB plug-in
Marquee plug-in
Math plug-in
MessageBox plug-in
Metadl
MoreInfo plug-in
N
NSIS Simple Firewall Plugin
NSIS Simple Service Plugin
NSIS SkinCrafter Plugin plug-in
NSIS-Date plug-in
NSIS-OS plug-in--这个插件允许你检测OS 版本或者平台。
NSISDirEx plug-in
NSISInstEx plug-in
NSISLog plug-in-- 写安装日志的插件,用来记录安装过程,从而准确删除安装过的文件的好插件。
NSISMultiMon plug-in
NSISdl Smooth-- NSISdlplug-in的修改版本,增加了安装过程的平滑风格显示.与NSISdl的功能没有其他差别.
NSISpcre plug-in-- Nsis 正则表达式使用的插件
Name2ip plugin--把主机名转换成IP 地址。
NewAdvSplash plug-in
NotifyIcon plug-in
NsMCI plug-in
NsODBC plug-in
NsProcessplugin--通过名字查找/杀掉进程;通过指定的进程名杀掉所有进程,进程名不区分大小写
NsPython plug-in
NsRandom plug-in-- 能产生随机数的插件,某些时候,这个插件是很有用的。
NsSCM plug-in
NsScreenshot plug-in-- 保存屏幕截图为一个BMP文件的插件。可全屏幕截图或指定窗口截图
NsWeb plug-in-- 可以插入一个支持 HTML 的页面插件,也可以以弹出窗口的方式显示,做广告的东东。
NsXML plug-in
NsisDDE plug-in
NsisFirewall plug-in
NsisXML plug-in
NsisXML plug-in
Nsisdbg plug-in
Nsisunz plug-in
Nwiz plug-in
NxSMSILoaderDlg plug-in
Nxs plug-in
NSISUser plug-in
NsRestartExplorer plug-in
NsisStartMenu plug-in
P
PassDialog plug-in--可以创建4种密码对话框的插件用于创建用户名、密码或者序列号之类的验证是个错的选择。
Perlplugin-- 这是一个允许在 NSIS 安装程序中执行 Perl 代码的插件。
PopupListBox plug-in
Processes plug-in -- 查找和清除进程(包括设备驱动)的插件.
ProxySettings
R
RealProgress plug-in
RegBin plug-in
Registration plug-in
Registry plug-in
RfshDktp plug-in -- 一个刷新桌面的插件,有时候程序安装了桌面图标,为什么用户看不见呢,那就需要这个插件了。
S
SAFER plug-in
SFhelper Plugin
ScrollLicense plug-in
SelfDel plug-in
Services plug-in
SetCursor plug-in--一个设置光标或改变其位置的NSIS插件。
ShellLink plug-in --这是允许你读取一个快捷方式文件(*.lnk)的插件,那样你就可以知道这个快捷方式的情况.
ShutDown plug-in--一个注销,重启或关闭计算机的NSIS插件。
ShutdownAllow plug-in--当安装程序运行时,这个插件允许Windows关闭或者注销。
SimpleBg plug-in
SkinnedButton plug-in --这个插件允许在安装按钮上添加皮肤
SpiderBanner plug-in
Stack plug-in--这个NSIS插件可以操作NSIS堆或者私人堆
SysRestore plug-in
System plug-in
T
TAPIhelp plug-in -- 用来检测 modem 的 ID 和名称的插件。
TCP plug-in
TextReplace plugin--文本替换插件
Time plug-in--时间插件
ToggleInstFiles plug-in
ToolTips plug-in --可以设置安装程序的提示窗口(例如按钮的帮助提示,正常情况下是浅黄背景色)的前景和背景颜色。
U
UAC plug-in
UnTGZ plug-in -- 这是一个解压缩插件。(*.tgz
!define
[/date] 符号[值]
这个命令将会向全局定义列表中添加“符号”。这个效果与对编译器使用/D命令行切换效果相似。(只有在!define命令之后,定义才有效)
如果使用了 /date,则定义的值会被格式化为 strtime格式。strtime 会把代表当前的时间日期转换为实际的值。例如%H会转换为当前时间的 24 小时格式。完整的格式化字串列表你可以查找 MSDN。在 POSIX平台,你可以使用 man strtime 来获取列表。
如:
!defineUSE_SOMETHING
!defineVERSION 1.2
!define/date NOW "%H:%M:%S %d %b, %Y"
变量
所有的变量都是全局的并且可以用于区段和函数。需要注意的是,在默认情况下变量被限制在1024字节。要扩大这个限制你需要重新构建一个使用了更大NSIS_MAX_STRLEN值的NSIS 或使用特别版本。
!include
文件这个命令可以将一个文件包含到脚本中,就像是脚本的一部分一样。请注意,如果一个文件包含在了另一个目录中,那么当前目录仍是编译脚本的地方(不是要包含的文件所在的目录)。如果编译器无法找到文件,那么它将会在每一个包含目录中查找。
常量
常量通常用在 InstallDir属性里。
需要注意的是一些新的常量并不是在所有的 OS上都是正常的。例如 $CDBURN_AREA 仅在 Windows XP及以上系统中才正常。如果在 Windows 98中使用将会得到空值。除非特别提示,否则该常量都是在所有 OS上有效的。
$PROGRAMFILES
程序文件目录(通常为 C:Program Files但是运行时会检测)。
$COMMONFILES
公用文件目录。这是应用程序共享组件的目录(通常为 C:Program FilesCommonFiles但是运行时会检测)。
$DESKTOP
Windows 桌面目录(通常为 C:windowsdesktop但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext设置。默认为当前用户。
$EXEDIR
安装程序运行时的位置。(从技术上来说你可以修改改变量,但并不是一个好方法)。
${NSISDIR}
包含 NSIS 安装目录的一个标记。在编译时会检测到。常用于在你想调用一个在NSIS目录下的资源时,例如:图标、界面……
$WINDIR
Windows 目录(通常为 C:windows或 C:winnt 但在运行时会检测)
$SYSDIR
Windows 系统目录(通常为 C:windowssystem或 C:winntsystem32但在运行时会检测)
$TEMP
系统临时目录(通常为 C:windowstemp但在运行时会检测)
$STARTMENU
开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。
$SMPROGRAMS
开始菜单程序目录(当你想定位 $STARTMENU程序时可以使用它)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。
$SMSTARTUP
开始菜单程序/启动目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。
$QUICKLAUNCH
在 IE4 活动桌面及以上的快速启动目录。如果快速启动不可用,仅仅返回和$TEMP一样。
$DOCUMENTS
文档目录。一个当前用户典型的路径形如 C:Documents and SettingsFooMyDocuments。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。该常量在Windows 95且 Internet Explorer 4没有安装时无效。
$SENDTO
该目录包含了“发送到”菜单快捷项。
$RECENT
该目录包含了指向用户最近文档的快捷方式。
$FAVORITES
该目录包含了指向用户网络收藏夹、文档等的快捷方式。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量在Windows 95 且 Internet Explorer4没有安装时无效。
$MUSIC
用户的音乐文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在Windows XP、ME及以上才有效。
$PICTURES
用户的图片目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在Windows 2000、XP、ME及以上才有效。
$VIDEOS
用户的视频文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在Windows XP、ME及以上才有效。
$NETHOOD
该目录包含了可能存在于我的网络位置、网上邻居文件夹的链接对象。该常量在 Windows 95且 Internet Explorer 4和活动桌面没有安装时无效。
$FONTS
系统字体目录。
$TEMPLATES
文档模板目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。
$APPDATA
应用程序数据目录。当前用户路径的检测需要 Internet Explorer 4及以上。所有用户路径的检测需要Internet Explorer 5及以上。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量在Windows 95 且 Internet Explorer4和活动桌面没有安装时无效。
$LOCALAPPDATA
本机应用程序数据目录。该常量仅在 Windows 2000或以上系统有效。.
$PRINTHOOD
该目录包含了可能存在于打印机文件夹的链接对象。该常量在Windows 95和 Windows 98 上无效。
$INTERNET_CACHE
Internet Explorer的临时文件目录。该常量在Windows 95 和 Windows NT且 Internet Explorer 4和活动桌面没有安装时无效。
$COOKIES
Internet Explorer的 Cookies 目录。该常量在 Windows 95和 Windows NT 且 Internet Explorer4和活动桌面没有安装时无效。
$HISTORY
Internet Explorer的历史记录目录。该常量在Windows 95 和 Windows NT且 Internet Explorer 4和活动桌面没有安装时无效。
$PROFILE
用户的个人配置目录。一个典型的路径如 C:Documents and SettingsFoo。该常量在Windows2000及以上有效。
$ADMINTOOLS
一个保存管理工具的目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量在Windows 2000、ME及以上有效。
$RESOURCES
该资源目录保存了主题和其他 Windows资源(通常为 C:WindowsResources但在运行时会检测)。该常量在WindowsXP及以上有效。
$RESOURCES_LOCALIZED
该本地的资源目录保存了主题和其他 Windows资源(通常为 C:WindowsResources1033但在运行时会检测)。该常量在WindowsXP及以上有效。
$CDBURN_AREA
一个在烧录 CD 时储存文件的目录。该常量在 Windows XP 及以上有效。
$HWNDPARENT
父窗口的十进制窗口句柄。
$PLUGINSDIR
该路径是一个临时目录,当第一次使用一个插件或一个调用InitPluginsDir时被创建。该文件夹当安装程序退出时会被自动删除。这个文件夹的用意是用来保存给InstallOptions使用的INI文件、启动画面位图或其他插件运行需要的文件。
字串里使用的常量
$$
转义,用来表示 $。
$r
用来表示一个回车(r)。
$n
用来表示新的一行(n)。
$t
用来表示一个 Tab(t)。
!insertmacro、Name、OutFile、InstallDir、InstallDirRegKey、ShowInstDetails、ShowUnInstDetails、BrandingText
; Welcomepage
!insertmacroMUI_PAGE_WELCOME
; Licensepage
!insertmacro MUI_PAGE_LICENSE"协议许可.rtf"
; Directorypage
!insertmacroMUI_PAGE_DIRECTORY
; Instfilespage
!insertmacroMUI_PAGE_INSTFILES
; Finishpage
!define MUI_FINISHPAGE_RUN"$INSTDIRBinGenPat.exe"
!insertmacroMUI_PAGE_FINISH
; Uninstallerpages
!insertmacroMUI_UNPAGE_INSTFILES
; Languagefiles
!insertmacro MUI_LANGUAGE"SimpChinese"
; MUI end------
Name "${PRODUCT_NAME}${PRODUCT_VERSION}"
;OutFile"Setup.exe"
;OutFile"${PRODUCT_NAME}.exe"
OutFile"自定义.exe"
InstallDir"$PROGRAMFILESsignjing安装示例"
InstallDirRegKey HKLM"${PRODUCT_DIR_REGKEY}" ""
ShowInstDetailsshow
ShowUnInstDetailsshow
BrandingText " signjing博客 http://blog.csdn.net/signjing"
!insertmacro
宏名称 [参数] [...]
插入一个由 !macro创建的宏的内容。如果创建的宏带有参数,那么你必须按宏的需求向它传送足够的参数。
!macro Printtext
DetailPrint"${text}"
!macroend
!insertmacro Print"some text"
!insertmacro Print"some more text"
name
名称 [双与名称]
设置安装程序的名称。名称通常用来显示产品的名称比如“我的程序””。如果在名称里有一个或多个与符号(&),把第二个参数设为与第一个相同,有&的地方使用两个 & 来表示。例如你的产品名称为“foo & bar2000”,那么使用:
Name "foo& bar2000" "foo && bar2000"
如果你的安装程序名称里有 & 符号并且对名称使用了一个 LangString,那么你还需要创建另一个含有双&字符的名称作为第二个参数。
接受变量。如果使用了变量,使用的变量必须在 .onInit被初始化。
outfile
[路径]安装程序.exe
指定 MakeNSIS 要写入安装程序的输出文件。仅仅是MakeNSIS要写入的文件,它不会对安装程序的内容有任何影响。
installdir
默认安装目录设定默认的安装目录。查看变量一节得到可用于该字串的变量(尤其是 $PROGRAMFILES)。注意该字串中最后一个后面的部分会被保留,当用户在安装时选择“浏览”并取得新的目录字串时,该部分会自动附加在后面(要禁止该行为你需要在目录字串后面添加一个额外的,但是你要使用引号把目录字串括起来以避免被认为是断行处理)。如果没有起作用的话,还是使用浏览按钮吧。
installdirregkey
根键子键键名该属性让安装程序去检测一注册表里的一个字串,如果该字串可用那么把它用来作为安装目录。如果预置了该属性,当指定的注册表键可用时它会越过InstallDir指定的字串,否则使用默认的InstallDir指定值。查询注册表时,该命令将自动截去引号(如"C:program filespoop""%1",可得到 C:programfilespoop )。如果该字串以 .exe结尾,它还会自动移去字串里的文件名部分(如 C:program filespooppoop.exe,将得到C:program filespoop)。对于更多高级的安装目录配置,可在 .onInit函数里设定 $INSTDIR。[译者注:事实上它还可以自动截取如 "C:program filespooppoop.exe""%1"而得到 C:programfilespoop ,这样你只要知道了某个程序关联的文件类型,就可以直接用它获得该程序的安装目录。比如InstallDirRegKey HKCR"FlashGet.Documentshellopencommand"""即可获得网际快车的安装目录]
showinstdetails
hide|show|nevershow
设置是否显示安装详细信息。你可以设为 hide来隐藏详细信息但用户可以查看,show 用来默认显示详细信息,nevershow可以阻止用户查看任何信息。注意区段里可以使用SetDetailsView来更改它的设置。
showuninstdetails
hide|show|nevershow
设置是否显示卸载详细信息。你可以设为 hide来隐藏详细信息但用户可以查看,show 用来默认显示详细信息,nevershow可以阻止用户查看任何信息。注意区段里可以使用SetDetailsView来更改它的设置。
brandingtext
/TRIM(LEFT|RIGHT|CENTER)文本设置显示在安装程序窗口底部的文本(默认为“NullsoftInstall System vX.XX”)。如果设为空字串("")则使用默认值;设为" "(一个空格)则显示空白。如果你不知道哪个适合你,那就保留默认值吧,这样可以使每个人知道你使用的NSIS版本。使用 /TRIMLEFT、/TRIMRIGHT或 /TRIMCENTER 来裁剪控制大小到字串大小。
section、SetOutPath、SetOverwrite、File、CreateDirectory、CreateShortCut、SectionEnd
Section"MainSection" SEC01
SetOutPath"$INSTDIRBin"
SetOverwritetry
File"....Program FilesNSISBinGenPat.exe"
CreateDirectory"$SMPROGRAMSsignjing安装示例"
CreateShortCut"$SMPROGRAMSsignjing安装示例signjing安装示例.lnk""$INSTDIRBinGenPat.exe"
CreateShortCut"$DESKTOPsignjing安装示例.lnk""$INSTDIRBinGenPat.exe"
……
File"....Program FilesNSISNSIS.chm"
CreateShortCut"$SMPROGRAMSsignjing安装示例Help.lnk""$INSTDIRNSIS.chm"
……
SetOutPath"$INSTDIR"
File"....Program FilesNSISuninst-nsis.exe"
SectionEnd
Section
[/o] [([!]|[-])区段名] [区段索引输出]
开始并且打开一个新的区段。如果区段名为空、遗漏或者以一个-开头,那么它将是一个隐藏的区段,用户也不能选择禁止它。如果一个区段名为“Uninstall”或以“un.”为前缀,那么它就是一个卸载程序区段。如果指定了区段索引输出,该参数将被定义(!defined)为区段索引(然后可以对它使用 SectionSetText等)。如果区段名以一个 !开头,那么该区段的显示名称将以粗体字显示。如果指定了/o开关,则该区段默认为不选。
Section "-隐藏区段"
SectionEnd
Section # 隐藏区段
SectionEnd
Section "!描黑区段"
SectionEnd
Section /o "可选区段"
SectionEnd
Section "某些安装" SEC_IDX
SectionEnd
SectionEnd
该命令关闭当前打开的区段。
SetOutPath
输出路径设置输出路径($OUTDIR)且当路径不存在时创建(需要时会递归创建)。必须为全路径名,通常都使用 $INSTDIR。
SetOutPath$INSTDIR
Fileprogram.exe
SetOverwrite
on|off|try|ifnewer|ifdiff|lastused
该命令设置了由 File 命令使用的覆盖标记来决定目标文件已存在时是否覆盖。如果覆盖标记为on ,则目标文件被覆盖(这个是默认值)。如果覆盖标记为 off ,则已存在的文件不会被覆盖。如果覆盖标记为try,文件仅当可以被覆盖时(就是说假如文件不能写入,它会自动略过而不需要用户决定)才会覆盖目标文件。如果覆盖标记为ifnewer,则仅当已存在的文件比新文件旧时才会覆盖目标文件。如果覆盖标记为ifdiff,则仅当已存在的文件比新文件旧或新时才会覆盖目标文件。注意在 ifnewer 或 ifdiff模式下,目标文件的日期都会被设为新文件的日期,而不管SetDateSave是怎么设置的。
SetOverwriteoff
File program.cfg#配置文件将不会覆盖
SetOverwriteon
File
[/nonfatal] [/a] ([/r][/x文件|通配符[...]] (文件|通配符) [...] | /oname=输出路径文件名输入路径文件名)
释放文件到当前输出路径($OUTDIR)。
注意输出文件名是 $OUTDIR文件名。
如果使用了 /oname=X 开关,则输出文件会变为 $OUTDIRX。当使用了 /oname=开关时只能指定一个文件,且输出的文件名可以使用变量(或完整路径如$SYSDIRwhatever.dll)。如果输出名称包含了空格,你需要用双引号把参数括起来,包括/oname,就像下面例子显示的那样。
支持通配符。
如果使用了 /r开关,匹配的文件将会在子目录里被递归的搜索。如果目录名匹配则所有包含的内容都会被递归添加。目录结构也会被保持。
使用 /x 开关可以用来来排除文件或目录。
如果使用了 /a 开关,则被添加的文件的属性将会保持。
如果覆盖模式被设定为 try 并且文件不能覆盖,那么 File 命令将会置一个错误标记,或者如果覆盖模式被设定为on并且文件不能覆盖并用户选择了忽略时,也会放置一个错误标记。
如果使用了 /nonfatal开关且当文件未找到时使用警告来代替错误。
Filesomething.exe
File /asomething.exe
File*.exe
File /r*.dat
File /rdata
File/oname=$TEMPtemp.dat somefile.ext
File"/oname=$TEMPname with spaces.dat" somefile.ext
File /nonfatal"一个可能不存在的文件"
File /r /xCVS myproject*.*
File /r /x*.res /x *.obj /x *.pch source*.*
CreateDirectory
要创建的路径
创建 (递归创建)指定的目录。当目录不能创建时会放置一个错误标记。
你也可以指定一个绝对路径。
CreateDirectory$INSTDIRsomedirectory
CreateShortCut
快捷文件.lnk 目标文件 [参数 [图标文件 [图标索引号 [启动选项 [键盘快捷键 [描述]]]]]]
创建一个指向“目标文件”的快捷方式“快捷文件.lnk”,可以带“参数”参数。用于快捷方式的图标为“图标文件,图标索引号”;要使用默认图标的话把“图标文件”和“图标索引号”设为空字串。“启动选项”可以是它们之一:SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED,或一个空字串。“键盘快捷键”应该为 flag|c格式且 flag 可以联合使用(使用 |): ALT, CONTROL, EXT,或 SHIFT。c为要使用的字符(a-z, A-Z, 0-9, F1-F24 等等)。注意在这些字串里不能含有空格。一个典型的例子为"ALT|CONTROL|F8"。$OUTDIR被用来作为工作目录。你可以在创建快捷方式之前使用SetOutPath来指定或更改。“描述”为快捷方式的描述,或在 XP下作为注释调用。当快捷方式不能创建的时候会放置一个错误标记(例如路径 (链接路径或目标路径)不存在或一些其它错误)。
CreateDirectory"$SMPROGRAMSMy Company"
CreateShortCut"$SMPROGRAMSMy CompanyMy Program.lnk" "$INSTDIRMy Program.exe"
"somecommand line parameters" "$INSTDIRMy Program.exe" 2 SW_SHOWNORMAL
ALT|CTRL|SHIFT|F5 "a description"
WriteIniStr、WriteUninstaller、WriteRegStr
Section-AdditionalIcons
WriteIniStr"$INSTDIR${PRODUCT_NAME}.url" "InternetShortcut" "URL""${PRODUCT_WEB_SITE}"
CreateShortCut"$SMPROGRAMSsignjing安装示例Website.lnk""$INSTDIR${PRODUCT_NAME}.url"
CreateShortCut"$SMPROGRAMSsignjing安装示例Uninstall.lnk""$INSTDIRuninst.exe"
SectionEnd
Section-Post
WriteUninstaller"$INSTDIRuninst.exe"
WriteRegStrHKLM "${PRODUCT_DIR_REGKEY}" """$INSTDIRBinGenPat.exe"
......
WriteRegStr${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher""${PRODUCT_PUBLISHER}"
SectionEnd
WriteINIStr
INI文件区段项值把“项” =“值”写入“INI文件”的“区段名”区段。如果 INI文件不能写入则放置一个错误的标记。
WriteINIStr$TEMPsomething.ini section1 something 123
WriteINIStr$TEMPsomething.ini section1 somethingelse 1234
WriteINIStr$TEMPsomething.ini section2 nsis true
WriteUninstaller
[路径]可执行文件名.exe
由指定的文件名(路径为可选项)写入卸载程序。仅在一个安装区段或函数里有效,并且你的脚本里必须有一个卸载区段。也可以参考卸载配置。你可以调用一次或多次来写入一个或多个卸载程序(副本)。
WriteUninstaller$INSTDIRuninstaller.exe
WriteRegStr
根键子键项值把字串写入注册表。详细信息请查看WriteRegExpandStr。
WriteRegStrHKLM "SoftwareMy CompanyMy Software" "String Value" "deadbeef"
函数、Function、HideWindow、MessageBox、Abort、FunctionEnd、Delete、RMDir、DeleteRegKey、SetAutoClose
Functionun.onUninstSuccess
HideWindow
MessageBoxMB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd
Functionun.onInit
MessageBoxMB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name),其及所有的组件?" IDYES+2
Abort
FunctionEnd
SectionUninstall
Delete"$INSTDIR${PRODUCT_NAME}.url"
Delete"$INSTDIRuninst.exe"
……
Delete"$INSTDIRBinGenPat.exe"
Delete"$SMPROGRAMSsignjing安装示例Uninstall.lnk"
……
Delete"$SMPROGRAMSsignjing安装示例signjing安装示例.lnk"
RMDir"$SMPROGRAMSsignjing安装示例"
……
RMDir"$INSTDIR"
DeleteRegKey${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}"
DeleteRegKeyHKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClosetrue
SectionEnd
函数
函数类似于区段因为他们可以包含零个或多个指令。用户函数不会被安装程序直接调用,而必须在区段里使用Call指令来调用。而当一个必然事件发生时回调函数将由安装程序调用。
函数必须在区段或其他函数之外声明。
Function
[函数名]
开始并打开一个新的函数。一般函数名以 .开头的(例如 ".Whatever")作为回调函数保留。函数名以un.开头的函数将会被创建在卸载程序里。因此,普通安装区段和函数不能调用卸载函数,而卸载区段和卸载函数也不能调用普通安装程序的函数。
Functionfunc
# 一些命令
FunctionEnd
Section
Callfunc
SectionEnd
FunctionEnd
该命令关闭当前打开的函数。
HideWindow
隐藏安装程序。
MessageBox
消息框选项列表消息框文本 [/SD返回] [检测返回值跳转到标记] [检测返回值2跳转到标记2]
显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个,多个使用|来隔开(例如 MB_YESNO|MB_ICONSTOP)。
MB_OK - 显示 OK 按钮
MB_OKCANCEL - 显示 OK 和取消按钮
MB_ABORTRETRYIGNORE-显示退出、重试、忽略按钮
MB_RETRYCANCEL -显示重试和取消按钮
MB_YESNO - 显示是和否按钮
MB_YESNOCANCEL -显示是、否、取消按钮
MB_ICONEXCLAMATION-显示惊叹号图标
MB_ICONINFORMATION -显示信息图标
MB_ICONQUESTION -显示问号图标
MB_ICONSTOP - 显示终止图标
MB_TOPMOST - 使消息框在最前端显示
MB_SETFOREGROUND -设置前景
MB_RIGHT - 右对齐文本
MB_RTLREADING - RTL阅读次序
MB_DEFBUTTON1 -默认为按钮 1
MB_DEFBUTTON2 -默认为按钮 2
MB_DEFBUTTON3 -默认为按钮 3
MB_DEFBUTTON4 -默认为按钮 4
“检测返回值”可以为 0(或空,或保留关闭),或下列之一:
IDABORT - 退出按钮
IDCANCEL - 取消按钮
IDIGNORE - 忽略按钮
IDNO - 否按钮
IDOK - OK 按钮
IDRETRY - 重试按钮
IDYES - 是按钮
如果消息框的返回值为“检测返回值”,则安装程序执行跳转。
用 /SD来指定一个上面列出的返回值当在安装程序静默安装时作为返回值。详细信息请查看 section 4.12。
MessageBox MB_OK "简单消息框"
MessageBox MB_YESNO "真的吗?" IDYES true IDNO false
true:
DetailPrint"是真的!"
Gotonext
false:
DetailPrint"是假的"
next:
MessageBox MB_YESNO "真的吗?(静默安装时默认为是)" /SD IDYES IDNO false2
DetailPrint "是真的(或静默)!"
Gotonext2
false2:
DetailPrint"是假的"
next2:
Abort
[用户信息]取消安装,停止执行脚本,并且在状态显示里显示用户信息。注意:你可以用于回调函数来实现一些特殊功能。页面回调也可以用Abort 来实现特殊目的。
Abort
Abort "不能安装"
Delete
[/REBOOTOK] 文件从目标系统删除文件(可以是文件或通配符,但必须指定一个完整的路径)。如果指定了 /REBOOTOK并且该文件当前不可删除,则会在系统重启时删除该文件--如果该文件要在系统重启时删除,你还要设置一个重启的标记。如果找到的文件不能被删除则会置一个错误标记。但该错误标记不是为尝试删除一个不存在的文件设置的。
RMDir
[/r][/REBOOTOK]目录名删除指定的目录(完整路径)。没有/r参数时只有在目录为空时才会被删除。如果指定了/r,则目录会被递归删除,所以在指定目录下的所有文件和目录均被删除。如果指定了/REBOOTOK,任何当前不能删除的文件或目录将会在重启后被删除——如果文件或目录需要在重启时被删除,会放置一个重启的标记。当文件或目录不能被删除时放置一个错误的标记。
RMDir$INSTDIR
RMDir$INSTDIRdata
RMDir /r/REBOOTOK $INSTIDR
RMDir/REBOOTOK $INSTDIRDLLs
需要注意的是当前的工作目录不能删除。当前的工作目录由SetOutPath设定。例如,下面的例子里将不能删除该目录。
SetOutPath$TEMPdir
RMDir$TEMPdir
而下面的例子可以删除该目录。
SetOutPath$TEMPdir
SetOutPath$TEMP
RMDir$TEMPdir
DeleteRegKey
[/ifempty] 根键子键删除一个注册表键。如果指定了/ifempty,则该注册表键仅当它无子键时才会被删除(否则,整个注册表键将被删除)。有效的根键值在后面的WriteRegStr列出。如果该键不能被删除(或如果它不存在)则会放置一个错误的标记。
DeleteRegKeyHKLM "SoftwareMy CompanyMy Software"
DeleteRegKey/ifempty HKLM "SoftwareA key that might have subkeys"
SetAutoClose
true|false
取代默认的窗口自动关闭标记(由 AutoCloseWindow指定,且对于写在程序为false)。指定 true将使得安装程序在安装完成时立即关闭窗口,或者false来使它需要手动关闭。
一个向导默认生成的脚本便包含了这么多的语法,当然nsis的语法远不止这些。这并没有什么大不了了,随着对语法和nsis的了解和掌握,随着地编写脚本进行实践,这些语法、插件等资源都将为你服务
自己的脚本获取MAC地址,进行md5加密并向服务器发送消息部分:
; send insatall log to server
!define maxsize 4096
System::Alloc ${maxsize}
pop $3
System::Call 'iphlpapi::GetAdaptersInfo(i r3r4, *l ${maxsize}r2)i.r1'
cont:
System::Call '*$4(i.r4,i,&t260.r5, &t132.r6, i.r7,l.r8)'
Math::Script"hex={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};"
Math::Script "s=''; a=r8; b=r7;#{b-->0,s=s+hex[a/16]+hex[a]+#[b>0,'-','']; a=a/256;};r9=s;"
StrCpy $2 "mac=$9&ver=1.0.0.2" ;get mac and version
md5dll::GetMD5String "$2"
Pop $3
strCpy $6 "url";url换成需要发送的服务器地址即可
strCpy $7 "$6$2&k=$3"
inetc::post "" /noproxy /silent $7"$INSTDIRinstallreply.htm"
当然需要将md5和inect插件放到NSIS安装目录下的plugin文件夹中。
先说这么多吧,以后遇到了问题再添加。。。。。