NSIS的基本语法---逻辑、字符串、外部调用、ini文件

本文详细介绍了NSIS脚本语言的多种操作,包括INI文件读取、外部调用、注册DLL、字符串处理、逻辑操作等核心功能。通过具体示例展示了如何在安装包中运用这些指令,以实现更复杂的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、INI文件操作

1、ReadINIStr(INI文件

作用:从ini文件的[section_name]中的entry_name读取并将值存储到用户变量$ x中。将设置错误标志,如果未找到该条目,则将$ x分配给空字符串。

ReadINIStr $0 $INSTDIR\winamp.ini winamp outname

二、外部调用

1、ReserveFile

作用:把文件保存在稍后使用的数据区块用于下面的调用。有时,预先打包文件,方便安装加速释放之用

[/nonfatal] [/r] [/x file|wildcard [...]] file [file...]
ReserveFile "TimeZoneZh.ini"

2、Exec

作用:执行指定的程序并立即继续

请注意,指定的文件必须存在于目标系统上,而不是编译系统上。$ OUTDIR用于工作目录。如果无法启动进程,则会设置错误标志。注意,如果命令可以有空格,则应将其放在引号中以从参数中分隔它。

Exec '"$INSTDIR\command.exe" parameters'

3、ExecWait

作用:执行指定的程序并等待执行的进程退出结果

command [user_var(exit code)]
ExecWait '"$INSTDIR\someprogram.exe"' $0

4、ExecShell

作用:使用ShellExecute执行指定的程序。请注意,操作通常是“打开”,“打印”等,但可以是使用默认操作的空字符串。参数和show类型是可选的。$ OUTDIR用于工作目录。如果无法启动进程,则会设置错误标志

action command [parameters] [SW_SHOWDEFAULT | SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMI
ExecShell "open" "http://nsis.sf.net/"
ExecShell "open" "$INSTDIR\readme.txt"
ExecShell "print" "$INSTDIR\readme.txt"

5、RegDLL

作用:载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称,当指定之后)。当产生一个错误的时候会置一个错误标记(例如不能载入 DLL,不能初始化 OLE,不能找到入口点,或者函数返回任何其它错误 ERROR_SUCCESS (=0))。

其实就是注册或加载你要的插件!

 SetOutPath $INSTDIR
 RegDLL $INSTDIR\foo.dll

6、UnRegDLL

作用:加载指定的DLL并调用DllUnregisterServer。如果发生错误,则设置错误标志(即,它无法加载DLL,初始化OLE,查找入口点,或者函数返回除ERROR_SUCCESS(= 0)以外的任何内容)。

7、!include

作用:包含头文件

!include WinMessages.nsh

8、!insertmacro

作用:插入宏

;通过宏插入欢迎页面

!insertmacro MUI_PAGE_WELCOME

三、字符串操作

1、StrCpy

作用:拷贝字符创

user_var(destination) str [maxlen] [start_offset]

使用str设置用户变量$ x。请注意,str可以包含其他变量,或者正在设置的用户变量(以这种方式连接字符串等)。如果指定了maxlen,则字符串将是maxlen字符的最大值(如果maxlen为负数,则字符串将从末尾截断abs(maxlen)个字符)。如果指定了start_offset,则源将被它偏移(如果start_offset为负,则它将从字符串的末尾开始abs(start_offset))。

StrCpy $0 "a string"     # = "a string"
StrCpy $0 "a string" 3   # = "a s"
StrCpy $0 "a string" -1  # = "a strin"
StrCpy $0 "a string" "" 2   # = "string"
StrCpy $0 "a string" "" -3  # = "ing"
StrCpy $0 "a string" 3 -4   # = "rin"

2、StrCmp

str1 str2 jump_if_equal [jump_if_not_equal]

比较(不区分大小写)str1到str2。如果str1和str2相等,则Gotos jump_if_equal,否则Gotos jump_if_not_equal。

StrCmp $0 "a string" 0 +3
  DetailPrint '$$0 == "a string"'
  Goto +2
  DetailPrint '$$0 != "a string"'

3、StrLen

作用:使用str的长度设置用户变量$ x

StrLen $0 "123456"  # = 6

四、逻辑操作

1、Push

作用:把一个字串压入堆栈,该字串可随后从堆栈里弹出。

2、Pop

作用:从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记

Push 1
Pop $0 # = 1

3、if

(1)IfAbort

label_to_goto_if_abort [label_to_goto_if_no_abort]

作用:如果调用abort,它将“返回”为true。如果用户选择对无法创建(或覆盖)的文件进行中止,或者用户手动中止,则会发生这种情况。只能从instfiles 页面的leave函数调用此函数 

Function instfilesLeave
  IfAbort 0 +2
    MessageBox MB_OK "user aborted"
FunctionEnd

(2)IfErrors

作用:检查并清除错误标志,如果设置了,它将转到jumpto_iferror,否则它将转到jumpto_ifnoerror。当发生可恢复的错误(例如尝试删除正在使用的文件)时,错误标志由其他指令设置。

jumpto_iferror [jumpto_ifnoerror]
IfErrors 0 +2
  Call ErrorHandler

(3)IfFileExists 

file_to_check_for jump_if_present [jump_otherwise]

作用:检查文件file_to_check_for(可以是通配符或目录)是否存在,如果文件存在则检查Gotos jump_if_present,否则检查Gotos jump_otherwise。如果要检查文件是否是目录,请使用IfFileExists DIRECTORY \ *.*

IfFileExists $WINDIR\notepad.exe 0 +2
  MessageBox MB_OK "notepad is installed"

4、Goto

作用:跳转到指定标记。nsi脚本常常使用相对跳转表示条件分枝,其语法是[+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。数字表示跳转的语句条数。

label_to_jump_to | +offset| -offset| user_var(target)

如果调用abort,它将“返回”为true。如果用户选择对无法创建(或覆盖)的文件进行中止,或者用户手动中止,则会发生这种情况。只能从instfiles 页面的leave函数调用此函数  。

Goto label
Goto +2
Goto -2
Goto $0

5、MessageBox

mb_option_list messagebox_text [/SD return] [return_check jumpto] [return_check_2 jumpto_2]

显示包含文本“messagebox_text”的MessageBox。mb_option_list必须是以下中的一个或多个,由| s分隔(例如MB_YESNO | MB_ICONSTOP)

  • MB_OK  - 使用OK按钮显示
  • MB_OKCANCEL  - 显示确定和取消按钮
  • MB_ABORTRETRYIGNORE  - 显示中止,重试,忽略按钮
  • MB_RETRYCANCEL  - 显示重试和取消按钮
  • MB_YESNO  - 显示是和否按钮
  • MB_YESNOCANCEL  - 显示是,否,取消按钮
  • MB_ICONEXCLAMATION  - 显示带感叹号图标
  • MB_ICONINFORMATION  - 显示信息图标
  • MB_ICONQUESTION  - 显示问号图标
  • MB_ICONSTOP  - 显示停止图标
  • MB_USERICON  - 显示安装程序的图标
  • MB_TOPMOST  - 使消息框最顶层
  • MB_SETFOREGROUND  - 设置前景
  • MB_RIGHT  - 右对齐文本
  • MB_RTLREADING  - RTL读取顺序
  • MB_DEFBUTTON1  - 按钮1是默认值
  • MB_DEFBUTTON2  - 按钮2是默认值
  • MB_DEFBUTTON3  - 按钮3是默认值
  • MB_DEFBUTTON4  - 按钮4是默认值

Return_check可以是0(或空或停止),或者以下之一:

  • IDABORT  - 中止按钮
  • IDCANCEL  - 取消按钮
  • IDIGNORE  - 忽略按钮
  • IDNO  - 没有按钮
  • IDOK  - 确定按钮
  • IDRETRY  - 重试按钮
  • IDYES  - 是按钮

参考:

官方论坛

NSIS中文论坛

轻狂志博客

NSIS使用手册

静默虚空

 

Ma_Hong_Kai 学习笔记,如有错误之处,欢迎指正。

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 相关网站 翻译反馈 免责声明
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值