nsis安装包_示例脚本语法解析

转自:http://www.cnblogs.com/yplong/p/3700817.html


以下是代码及解析,其中有底色的部分为脚本内容。

注释、!define、变量、!include、常量

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines

 

!define PRODUCT_NAME "signjing安装示例"

!define PRODUCT_VERSION "0.0.0.1"

!define PRODUCT_PUBLISHER "signjing"

!define PRODUCT_WEB_SITE "http://blog.csdn.net/signjing"

!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\GenPat.exe"

!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

!define PRODUCT_UNINST_ROOT_KEY "HKLM"

 

; MUI 1.67 compatible ------

!include "MUI.nsh"

 

; MUI Settings

!define MUI_ABORTWARNING

......

;个性化图素;

!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\util\nsis_uis\白玉山塔.bmp"

 

!define MUI_WELCOMEPAGE_TITLE "\r\n   signjing安装示例向导"

 

!define MUI_WELCOMEPAGE_TEXT "  signjing安装示例是signjing开发的一个NSIS安装示例软件。\r\n\r\n  软件作者:signjing \r\n\r\n  官方网址:http://blog.csdn.net/signjing\r\n\r\n  $_CLICK"

 

注释

 ;  #开始的行为注释行。可以在命令后面添加注释,也可以使用C规范的注释来注释一行或多行。如果参数需要由;#开头,可以用双引号把它括起来。

如:

注释

注释

 

/*

注释

注释

*/

!define

 [/date] 符号 []

这个命令将会向全局定义列表中添加“符号”。这个效果与对编译器使用 /D命令行切换效果相似。(只有在 !define 命令之后,定义才有效)

 

如果使用了 /date,则定义的值会被格式化为 strtime格式。strtime 会把代表当前的时间日期转换为实际的值。例如 %H会转换为当前时间的 24 小时格式。完整的格式化字串列表你可以查找MSDN。在 POSIX平台,你可以使用 man strtime 来获取列表。

如:

!define USE_SOMETHING

!define VERSION 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 Files\Common Files但是运行时会检测)

$DESKTOP

Windows 桌面目录(通常为 C:\windows\desktop但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。

$EXEDIR

安装程序运行时的位置。(从技术上来说你可以修改改变量,但并不是一个好方法)

${NSISDIR}

包含 NSIS 安装目录的一个标记。在编译时会检测到。常用于在你想调用一个在 NSIS 目录下的资源时,例如:图标、界面……

$WINDIR

Windows 目录(通常为 C:\windows C:\winnt 但在运行时会检测)

$SYSDIR

Windows 系统目录(通常为 C:\windows\system C:\winnt\system32 但在运行时会检测)

$TEMP

系统临时目录(通常为 C:\windows\temp但在运行时会检测)

$STARTMENU

开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$SMPROGRAMS

开始菜单程序目录(当你想定位 $STARTMENU\程序时可以使用它)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$SMSTARTUP

开始菜单程序/启动目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。

$QUICKLAUNCH

 IE4 活动桌面及以上的快速启动目录。如果快速启动不可用,仅仅返回和 $TEMP一样。

$DOCUMENTS

文档目录。一个当前用户典型的路径形如 C:\Documents and Settings\Foo\My Documents。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。该常量在 Windows 95 Internet Explorer 4 没有安装时无效。

$SENDTO

该目录包含了“发送到”菜单快捷项。

$RECENT

该目录包含了指向用户最近文档的快捷方式。

$FAVORITES

该目录包含了指向用户网络收藏夹、文档等的快捷方式。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量在 Windows 95  Internet Explorer 4没有安装时无效。

$MUSIC

用户的音乐文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在 Windows XPME及以上才有效。

$PICTURES

用户的图片目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在 Windows 2000XPME及以上才有效。

$VIDEOS

用户的视频文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量仅在 Windows XPME及以上才有效。

$NETHOOD

该目录包含了可能存在于我的网络位置、网上邻居文件夹的链接对象。该常量在 Windows 95 Internet Explorer 4 和活动桌面没有安装时无效。

$FONTS

系统字体目录。

$TEMPLATES

文档模板目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。

$APPDATA

应用程序数据目录。当前用户路径的检测需要 Internet Explorer 4及以上。所有用户路径的检测需要 Internet Explorer 5 及以上。这个常量的内容(所有用户或当前用户)取决于SetShellVarContext设置。默认为当前用户。该常量在 Windows 95  Internet Explorer 4和活动桌面没有安装时无效。

$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 Explorer 4和活动桌面没有安装时无效。

$HISTORY

Internet Explorer的历史记录目录。该常量在 Windows 95  Windows NT Internet Explorer 4 和活动桌面没有安装时无效。

$PROFILE

用户的个人配置目录。一个典型的路径如 C:\Documents and Settings\Foo。该常量在 Windows 2000及以上有效。

$ADMINTOOLS

一个保存管理工具的目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext设置。默认为当前用户。该常量在 Windows 2000ME及以上有效。

$RESOURCES

该资源目录保存了主题和其他 Windows资源(通常为 C:\Windows\Resources但在运行时会检测)。该常量在 Windows XP及以上有效。

$RESOURCES_LOCALIZED

该本地的资源目录保存了主题和其他 Windows资源(通常为 C:\Windows\Resources\1033但在运行时会检测)。该常量在 Windows XP及以上有效。

$CDBURN_AREA

一个在烧录 CD 时储存文件的目录。该常量在 Windows XP 及以上有效。

$HWNDPARENT

父窗口的十进制窗口句柄。

$PLUGINSDIR

该路径是一个临时目录,当第一次使用一个插件或一个调用 InitPluginsDir时被创建。该文件夹当安装程序退出时会被自动删除。这个文件夹的用意是用来保存给 InstallOptions使用的 INI 文件、启动画面位图或其他插件运行需要的文件。

字串里使用的常量

$$

转义,用来表示 $

$\r

用来表示一个回车(\r)

$\n

用来表示新的一行(\n)

$\t

用来表示一个 Tab(\t)

!insertmacroNameOutFileInstallDirInstallDirRegKeyShowInstDetailsShowUnInstDetailsBrandingText

; Welcome page

!insertmacro MUI_PAGE_WELCOME

; License page

!insertmacro MUI_PAGE_LICENSE "协议许可.rtf"

; Directory page

!insertmacro MUI_PAGE_DIRECTORY

; Instfiles page

!insertmacro MUI_PAGE_INSTFILES

; Finish page

!define MUI_FINISHPAGE_RUN "$INSTDIR\Bin\GenPat.exe"

!insertmacro MUI_PAGE_FINISH

 

; Uninstaller pages

!insertmacro MUI_UNPAGE_INSTFILES

 

; Language files

!insertmacro MUI_LANGUAGE "SimpChinese"

 

; MUI end ------

 

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"

;OutFile "Setup.exe"

;OutFile "${PRODUCT_NAME}.exe"

OutFile "自定义.exe"

InstallDir "$PROGRAMFILES\signjing安装示例"

InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""

ShowInstDetails show

ShowUnInstDetails show

 

BrandingText " signjing博客 http://blog.csdn.net/signjing"

!insertmacro

宏名称 [参数] [...]

插入一个由 !macro 创建的宏的内容。如果创建的宏带有参数,那么你必须按宏的需求向它传送足够的参数。

!macro Print text

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 files\poop" "%1",可得到 C:\program files\poop )。如果该字串以 .exe结尾,它还会自动移去字串里的文件名部分( C:\program files\poop\poop.exe,将得到 C:\program files\poop )。对于更多高级的安装目录配置,可在 .onInit函数里设定 $INSTDIR[译者注:事实上它还可以自动截取如 "C:\program files\poop\poop.exe" "%1"而得到 C:\program files\poop ,这样你只要知道了某个程序关联的文件类型,就可以直接用它获得该程序的安装目录。比如InstallDirRegKey HKCR "FlashGet.Document\shell\open\command" "" 即可获得网际快车的安装目录]

showinstdetails

hide|show|nevershow

设置是否显示安装详细信息。你可以设为 hide来隐藏详细信息但用户可以查看,show 用来默认显示详细信息,nevershow可以阻止用户查看任何信息。注意区段里可以使用 SetDetailsView来更改它的设置。

showuninstdetails

hide|show|nevershow

设置是否显示卸载详细信息。你可以设为 hide来隐藏详细信息但用户可以查看,show 用来默认显示详细信息,nevershow可以阻止用户查看任何信息。注意区段里可以使用 SetDetailsView来更改它的设置。

brandingtext

/TRIM(LEFT|RIGHT|CENTER)文本设置显示在安装程序窗口底部的文本(默认为“Nullsoft Install System vX.XX)。如果设为空字串("")则使用默认值;设为" "(一个空格)则显示空白。如果你不知道哪个适合你,那就保留默认值吧,这样可以使每个人知道你使用的 NSIS版本。使用 /TRIMLEFT/TRIMRIGHT /TRIMCENTER 来裁剪控制大小到字串大小。

sectionSetOutPathSetOverwriteFileCreateDirectoryCreateShortCutSectionEnd

Section "MainSection" SEC01

 SetOutPath "$INSTDIR\Bin"

 SetOverwrite try

 File "..\..\Program Files\NSIS\Bin\GenPat.exe"

 CreateDirectory "$SMPROGRAMS\signjing安装示例"

 CreateShortCut "$SMPROGRAMS\signjing安装示例\signjing安装示例.lnk" "$INSTDIR\Bin\GenPat.exe"

 CreateShortCut "$DESKTOP\signjing安装示例.lnk" "$INSTDIR\Bin\GenPat.exe"

 ……

 File "..\..\Program Files\NSIS\NSIS.chm"

 CreateShortCut "$SMPROGRAMS\signjing安装示例\Help.lnk" "$INSTDIR\NSIS.chm"

 ……

 SetOutPath "$INSTDIR"

 File "..\..\Program Files\NSIS\uninst-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

File program.exe

SetOverwrite

on|off|try|ifnewer|ifdiff|lastused

该命令设置了由 File 命令使用的覆盖标记来决定目标文件已存在时是否覆盖。如果覆盖标记为 on ,则目标文件被覆盖(这个是默认值)。如果覆盖标记为 off ,则已存在的文件不会被覆盖。如果覆盖标记为 try ,文件仅当可以被覆盖时(就是说假如文件不能写入,它会自动略过而不需要用户决定)才会覆盖目标文件。如果覆盖标记为 ifnewer,则仅当已存在的文件比新文件旧时才会覆盖目标文件。如果覆盖标记为 ifdiff ,则仅当已存在的文件比新文件旧或新时才会覆盖目标文件。注意在 ifnewer  ifdiff模式下,目标文件的日期都会被设为新文件的日期,而不管 SetDateSave是怎么设置的。

 

SetOverwrite off

File program.cfg #配置文件将不会覆盖

SetOverwrite on

File

[/nonfatal] [/a] ([/r] [/x文件|通配符 [...]] (文件|通配符) [...] | /oname=输出路径\文件名输入路径\文件名)

释放文件到当前输出路径($OUTDIR)

 

注意输出文件名是 $OUTDIR\文件名。

如果使用了 /oname=X 开关,则输出文件会变为 $OUTDIR\X。当使用了 /oname=开关时只能指定一个文件,且输出的文件名可以使用变量(或完整路径如 $SYSDIR\whatever.dll)。如果输出名称包含了空格,你需要用双引号把参数括起来,包括 /oname,就像下面例子显示的那样。

支持通配符。

如果使用了 /r 开关,匹配的文件将会在子目录里被递归的搜索。如果目录名匹配则所有包含的内容都会被递归添加。目录结构也会被保持。

使用 /x 开关可以用来来排除文件或目录。

如果使用了 /a 开关,则被添加的文件的属性将会保持。

如果覆盖模式被设定为 try 并且文件不能覆盖,那么 File 命令将会置一个错误标记,或者如果覆盖模式被设定为 on并且文件不能覆盖并用户选择了忽略时,也会放置一个错误标记。

如果使用了 /nonfatal开关且当文件未找到时使用警告来代替错误。

File something.exe

File /a something.exe

File *.exe

File /r *.dat

File /r data

File /oname=$TEMP\temp.dat somefile.ext

File "/oname=$TEMP\name with spaces.dat" somefile.ext

File /nonfatal "一个可能不存在的文件"

File /r /x CVS myproject\*.*

File /r /x *.res /x *.obj /x *.pch source\*.*

 

CreateDirectory

要创建的路径

创建 (递归创建)指定的目录。当目录不能创建时会放置一个错误标记。

你也可以指定一个绝对路径。

CreateDirectory $INSTDIR\some\directory

CreateShortCut

快捷文件.lnk 目标文件 [参数 [图标文件 [图标索引号 [启动选项 [键盘快捷键 [描述]]]]]]

创建一个指向“目标文件”的快捷方式“快捷文件.lnk”,可以带“参数”参数。用于快捷方式的图标为“图标文件,图标索引号”;要使用默认图标的话把“图标文件”和“图标索引号”设为空字串。“启动选项”可以是它们之一: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, 或一个空字串。“键盘快捷键”应该为 flag|c格式且 flag 可以联合使用(使用 |): ALT, CONTROL, EXT, SHIFTc为要使用的字符(a-z, A-Z, 0-9, F1-F24 等等)。注意在这些字串里不能含有空格。一个典型的例子为 "ALT|CONTROL|F8"$OUTDIR被用来作为工作目录。你可以在创建快捷方式之前使用 SetOutPath 来指定或更改。“描述”为快捷方式的描述,或在 XP 下作为注释调用。当快捷方式不能创建的时候会放置一个错误标记(例如路径 (链接路径或目标路径)不存在或一些其它错误)

 

CreateDirectory "$SMPROGRAMS\My Company"

CreateShortCut "$SMPROGRAMS\My Company\My Program.lnk" "$INSTDIR\My Program.exe" \

  "some command line parameters" "$INSTDIR\My Program.exe" 2 SW_SHOWNORMAL \

  ALT|CTRL|SHIFT|F5 "a description"

WriteIniStrWriteUninstallerWriteRegStr

 

Section -AdditionalIcons

 WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"

 CreateShortCut "$SMPROGRAMS\signjing安装示例\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"

 CreateShortCut "$SMPROGRAMS\signjing安装示例\Uninstall.lnk" "$INSTDIR\uninst.exe"

SectionEnd

 

Section -Post

 WriteUninstaller "$INSTDIR\uninst.exe"

 WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Bin\GenPat.exe"

......

 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"

SectionEnd

WriteINIStr

INI文件区段项值把“项” =“值”写入“INI文件”的“区段名”区段。如果 INI文件不能写入则放置一个错误的标记。

 

WriteINIStr $TEMP\something.ini section1 something 123

WriteINIStr $TEMP\something.ini section1 somethingelse 1234

WriteINIStr $TEMP\something.ini section2 nsis true

WriteUninstaller

[路径\]可执行文件名.exe

由指定的文件名(路径为可选项)写入卸载程序。仅在一个安装区段或函数里有效,并且你的脚本里必须有一个卸载区段。也可以参考卸载配置。你可以调用一次或多次来写入一个或多个卸载程序(副本)

WriteUninstaller $INSTDIR\uninstaller.exe

WriteRegStr

根键子键项值把字串写入注册表。详细信息请查看 WriteRegExpandStr

WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"

函数、FunctionHideWindowMessageBoxAbortFunctionEndDeleteRMDirDeleteRegKeySetAutoClose

 

Function un.onUninstSuccess

 HideWindow

 MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"

FunctionEnd

 

Function un.onInit

 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name),其及所有的组件?" IDYES +2

 Abort

FunctionEnd

 

Section Uninstall

 Delete "$INSTDIR\${PRODUCT_NAME}.url"

 Delete "$INSTDIR\uninst.exe"

 ……

 Delete "$INSTDIR\Bin\GenPat.exe"

 

 Delete "$SMPROGRAMS\signjing安装示例\Uninstall.lnk"

 ……

 Delete "$SMPROGRAMS\signjing安装示例\signjing安装示例.lnk"

 

 RMDir "$SMPROGRAMS\signjing安装示例"

 ……

 RMDir "$INSTDIR"

 

 DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"

 DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

 SetAutoClose true

SectionEnd

函数

函数类似于区段因为他们可以包含零个或多个指令。用户函数不会被安装程序直接调用,而必须在区段里使用 Call指令来调用。而当一个必然事件发生时回调函数将由安装程序调用。

函数必须在区段或其他函数之外声明。

Function

[函数名]

开始并打开一个新的函数。一般函数名以 .开头的(例如 ".Whatever")作为回调函数保留。函数名以 un.开头的函数将会被创建在卸载程序里。因此,普通安装区段和函数不能调用卸载函数,而卸载区段和卸载函数也不能调用普通安装程序的函数。

 

Function func

  # 一些命令

FunctionEnd

 

Section

  Call func

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 "是真的!"

  Goto next

false:

  DetailPrint "是假的"

next:

MessageBox MB_YESNO "真的吗?(静默安装时默认为是)" /SD IDYES IDNO false2

  DetailPrint "是真的 (或静默)"

  Goto next2

false2:

  DetailPrint "是假的"

next2:

Abort

[用户信息]取消安装,停止执行脚本,并且在状态显示里显示用户信息。注意:你可以用于回调函数来实现一些特殊功能。页面回调也可以用 Abort 来实现特殊目的。

Abort

Abort "不能安装"

Delete

[/REBOOTOK] 文件从目标系统删除文件(可以是文件或通配符,但必须指定一个完整的路径)。如果指定了 /REBOOTOK并且该文件当前不可删除,则会在系统重启时删除该文件 -- 如果该文件要在系统重启时删除,你还要设置一个重启的标记。如果找到的文件不能被删除则会置一个错误标记。但该错误标记不是为尝试删除一个不存在的文件设置的。

RMDir

[/r] [/REBOOTOK]目录名删除指定的目录(完整路径)。没有 /r参数时只有在目录为空时才会被删除。如果指定了 /r,则目录会被递归删除,所以在指定目录下的所有文件和目录均被删除。如果指定了 /REBOOTOK,任何当前不能删除的文件或目录将会在重启后被删除——如果文件或目录需要在重启时被删除,会放置一个重启的标记。当文件或目录不能被删除时放置一个错误的标记。

 

RMDir $INSTDIR

RMDir $INSTDIR\data

RMDir /r /REBOOTOK $INSTIDR

RMDir /REBOOTOK $INSTDIR\DLLs

需要注意的是当前的工作目录不能删除。当前的工作目录由 SetOutPath设定。例如,下面的例子里将不能删除该目录。

 

SetOutPath $TEMP\dir

RMDir $TEMP\dir

而下面的例子可以删除该目录。

 

SetOutPath $TEMP\dir

SetOutPath $TEMP

RMDir $TEMP\dir

DeleteRegKey

[/ifempty] 根键子键删除一个注册表键。如果指定了 /ifempty,则该注册表键仅当它无子键时才会被删除(否则,整个注册表键将被删除)。有效的根键值在后面的 WriteRegStr列出。如果该键不能被删除(或如果它不存在)则会放置一个错误的标记。

 

DeleteRegKey HKLM "Software\My Company\My Software"

DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys"

SetAutoClose

true|false

取代默认的窗口自动关闭标记( AutoCloseWindow指定,且对于写在程序为 false)。指定 true将使得安装程序在安装完成时立即关闭窗口,或者 false 来使它需要手动关闭。

 

一个向导默认生成的脚本便包含了这么多的语法,当然nsis的语法远不止这些。这并没有什么大不了了,随着对语法和nsis的了解和掌握,随着地编写脚本进行实践,这些语法、插件等资源都将为你服务。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NSIS 用户手册 新闻、信息、支持、例子、指南等可以到 http://nsis.sf.net 查看。 快速链接: FAQ - 常见问题列表 NSIS Wiki - 例子、函数、指南、插件、软件等等 Forum - 发表你的问题或进行 NSIS 相关讨论 版权所有 (C) 1999-2009 贡献者 第一章: 介绍 NSIS 关于 NSIS 主要特性 特性列表 第二章: 教程: 基础知识 介绍 脚本文件 脚本结构 安装程序属性 页面 区段 函数 脚本的工作方式 逻辑代码结构 变量 调试脚本 脚本的执行 编译器命令 编译器 新式用户界面(Modern UI) 插件 更多 第三章: 命令行的用法 MakeNSIS 的使用 选项 注意事项 环境变量 例子 安装程序的使用 公共选项 卸载程序特殊选项 例子 第四章: 脚本参考 脚本文件格式 变量 用户变量 Var 其他可写的变量 常量 在字符串里使用常量 标记 相对跳转 页面 次序关系 页面选项 回调 Page UninstPage PageEx PageExEnd PageCallbacks 区段 区段命令 AddSize Section SectionEnd SectionIn SectionGroup SectionGroupEnd 卸载区段 函数 函数命令 Function FunctionEnd 回调函数 安装回调 .onGUIInit .onInit .onInstFailed .onInstSuccess .onGUIEnd .onMouseOverSection .onRebootFailed .onSelChange .onUserAbort .onVerifyInstDir 卸载回调 un.onGUIInit un.onInit un.onUninstFailed un.onUninstSuccess un.onGUIEnd un.onRebootFailed un.onSelChange un.onUserAbort 安装程序属性 常规属性 AddBrandingImage AllowRootDirInstall AutoCloseWindow BGFont BGGradient BrandingText Caption ChangeUI CheckBitmap CompletedText ComponentText CRCCheck DetailsButtonText DirText DirVar DirVerify FileErrorText Icon InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType LicenseBkColor LicenseData LicenseForceSelection LicenseText MiscButtonText Name OutFile RequestExecutionLevel SetFont ShowInstDetails ShowUninstDetails SilentInstall SilentUnInstall SpaceTexts SubCaption UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText WindowIcon XPStyle 编译器标记 AllowSkipFiles FileBufSize SetCompress SetCompressor SetCompressorDictSize SetDatablockOptimize SetDateSave SetOverwrite 版本信息 VIAddVersionKey VIProductVersion 指令 基本指令 Delete Exec ExecShell ExecWait File Rename ReserveFile RMDir SetOutPath 注册表、INI 文件指令 DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue EnumRegKey EnumRegValue ExpandEnvStrings FlushINI ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr WriteINIStr WriteRegBin WriteRegDWORD WriteRegStr WriteRegExpandStr 常规用途指令 CallInstDLL CopyFiles CreateDirectory CreateShortCut GetDLLVersion GetDLLVersionLocal GetFileTime GetFileTimeLocal GetFullPathName GetTempFileName SearchPath SetFileAttributes RegDLL UnRegDLL 流程控制指令 Abort Call ClearErrors GetCurrentAddress GetFunctionAddress GetLabelAddress Goto IfAbort IfErrors IfFileExists IfRebootFlag IfSilent IntCmp IntCmpU MessageBox Return Quit SetErrors StrCmp StrCmpS 文件指令 FileClose FileOpen FileRead FileReadByte FileSeek FileWrite FileWriteByte FindClose FindFirst FindNext 卸载程序指令 WriteUninstaller 混合指令 GetErrorLevel GetInstDirError InitPluginsDir Nop SetErrorLevel SetRegView SetShellVarContext Sleep 字符串操作指令 StrCpy StrLen 堆栈支持 Exch Pop Push 整数支持 IntFmt IntOp 重新启动指令 Reboot SetRebootFlag 安装记录指令 LogSet LogText 区段管理 SectionSetFlags SectionGetFlags SectionSetText SectionGetText SectionSetInstTypes SectionGetInstTypes SectionSetSize SectionGetSize SetCurInstType GetCurInstType InstTypeSetText InstTypeGetText 用户界面指令 BringToFront CreateFont DetailPrint EnableWindow FindWindow GetDlgItem HideWindow IsWindow LockWindow SendMessage SetAutoClose SetBrandingImage SetDetailsView SetDetailsPrint SetCtlColors SetSilent ShowWindow 多语言指令 LoadLanguageFile LangString LicenseLangString 多语言 语言选择 LangDLL 插件 RTL 语言 插件 DLLs 使用插件命令 手动调用插件 静默安装程序、卸载程序 第五章: 编译时的命令 编译时的命令 !include !addincludedir !addplugindir !appendfile !cd !delfile !echo !error !execute !packhdr !system !tempfile !warning !verbose 预定义 ${__FILE__} ${__LINE__} ${__DATE__} ${__TIME__} ${__TIMESTAMP__} 范围预定义 ${__GLOBAL__} ${__SECTION__} ${__FUNCTION__} ${__PAGEEX__} ${__UNINSTALL__} 读取环境变量 $%envVarName% 条件编译 !define !undef !ifdef !ifndef !if !ifmacrodef !ifmacrondef !else !endif !insertmacro !macro !macroend !searchparse !searchreplace 附录 A: 新式用户界面(Modern UI) 附录 B: DLL/TLB 库的安装 介绍 库的安装 介绍 参数 选项 LIBRARY_X64 LIBRARY_SHELL_EXTENSION LIBRARY_COM LIBRARY_IGNORE_VERSION 注意事项 例子 取消共享 DLL 共享 DLL 库的卸载 介绍 参数 选项 LIBRARY_X64 LIBRARY_SHELL_EXTENSION LIBRARY_COM 例子 Visual Basic 6 运行库 附录 C: 常用脚本 获取 Internet Explorer 版本 判断 .NET Framework 是否已安装? 判断 Macromedia Flash Player 是否已安装? 连接到 Internet 获取安装程序文件名 禁止多个安装程序实例 更多 Appendix D: 常用信息 错误级别 添加卸载信息到添加/删除程序面板 使用 System.dll 插件来调用一个外部 DLL 把安装详细信息导出到文件 如何读取 REG_MULTI_SZ 值 附录 E: 常用头文件 文件函数头文件 介绍 Locate GetSize DriveSpace GetDrives GetTime GetFileAttributes GetFileVersion GetExeName GetExePath GetParameters GetOptions GetOptionsS GetRoot GetParent GetFileName GetBaseName GetFileExt BannerTrimPath DirState RefreshShellIcons 文本函数头文件 介绍 LineFind LineRead FileReadFromEnd LineSum FileJoin TextCompare TextCompareS ConfigRead ConfigReadS ConfigWrite ConfigWriteS FileRecode TrimNewLines 文字函数头文件 介绍 WordFind WordFindS WordFind2X WordFind2XS WordFind3X WordFind3XS WordReplace WordReplaceS WordAdd WordAddS WordInsert WordInsertS StrFilter StrFilterS VersionCompare VersionConvert 附录 F: 更新纪录和发行说明 2.44 更改日志 主要更改 次要更改 2.43 发行说明 更改日志 次要更改 实用程序和插件 翻译 Plug-in API 构建系统 2.42 发行说明 更改日志 主要更改 次要更改 翻译 构建系统 2.41 更改日志 次要更改 翻译 构建系统 2.40 更改日志 主要更改 次要更改 翻译 2.39 更改日志 主要更改 次要更改 2.38 更改日志 主要更改 次要更改 Modern UI 翻译 2.37 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.36 发行说明 更改日志 主要更改 Modern UI nsDialogs 次要更改 实用程序和插件 翻译 构建系统 2.35 更改日志 主要更改 次要更改 实用程序和插件 2.34 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.33 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.32 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.31 发行说明 更改日志 次要更改 实用程序和插件 翻译 构建系统 2.30 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.29 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.28 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.27 发行说明 更改日志 主要更改 次要更改 构建系统 2.26 发行说明 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.25 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.24 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.23 更改日志 次要更改 实用程序和插件 构建系统 2.22 发行说明 更改日志 次要更改 新/更改的命令 翻译 构建系统 2.21 更改日志 主要更改 次要更改 新/更改的命令 翻译 构建系统 2.20 更改日志 次要更改 翻译 构建系统 2.19 更改日志 次要更改 新/更改的命令 插件 翻译 2.18 更改日志 次要更改 翻译 2.17 更改日志 次要更改 翻译 2.16 发行说明 更改日志 主要更改 新/更改的命令 次要更改 翻译 构建系统 2.15 更改日志 新/更改的命令 次要更改 翻译 构建系统 2.14 发行说明 更改日志 主要更改 次要更改 2.13 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.12 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.11 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.10 更改日志 主要更改 次要更改 翻译 构建系统 2.09 更改日志 主要更改 新/更改的命令 次要更改 翻译 构建系统 2.08 发行说明 更改日志 主要更改 次要更改 构建系统 2.07 发行说明 更改日志 主要更改 新/更改的命令 次要更改 Include Files 实用程序和插件 翻译 2.06 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.05 发行说明 更改日志 新/更改的命令 次要更改 2.04 更改日志 主要更改 次要更改 2.03 发行说明 更改日志 主要更改 新/更改的命令 次要更改 2.02 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.01 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.0 发行说明 更改日志 Changes from 1.98 Changes from RC4 2.0 Release Candidate 4 更改日志 主要更改 次要更改 实用程序和插件 2.0 Release Candidate 3 更改日志 次要更改 实用程序和插件 2.0 Release Candidate 2 更改日志 次要更改 实用程序和插件 2.0 Release Candidate 1 发行说明 更改日志 主要更改 实用程序和插件 2.0 Beta 4 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.0 Beta 3 2.0 Beta 2 2.0 Beta 1 2.0 Beta 0 2.0 Alpha 7 2.0 Alpha 6 2.0 Alpha 5 2.0 Alpha 4 2.0 Alpha 3 2.0 Alpha 2 2.0 Alpha 1 2.0 Alpha 0 旧版本 附录 G: 构建 NSIS 常规构建 在 Windows 上构建 在 POSIX 上构建 每日构建 附录 H: 致谢名单 程序员 资源设计师 翻译人员 文档编写者 附录 I: 许可协议 版权 适用许可协议 zlib/libpng 许可协议 bzip2 许可协议 通用公共许可证 版本1.0 LZMA 压缩模块特殊例外声明 附录 J: 简体中文用户手册说明 致谢 NSIS 交流 NSIS 相关网站 翻译反馈 免责声明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值