NSIS使用说明

2020-02-22 14:17

学习NSIS一段时间了,在这段时间里自己遇到了很多问题,也用自己摸索的方法一个个解决了,先将积累的知识点以及自己遇到的问题及解决方案,与大家共享下: 第一部分:页面设置 ; MUI 预定义常量 通用页面

向导页面头上的文字!define MUI_PAGE_HEADER_TEXT text

向导页面头上的文字想到(解释用)!define MUI_PAGE_HEADER_SUBTEXT text 欢迎页面

大标题设置!define MUI_WELCOMEPAGE_TITLE \安装向导\标题下子内容设置!define MUI_WELCOMEPAGE_TEXT \欢迎说明或软件说明等\授权页面

安装协议定义!insertmacro MUI_PAGE_LICENSE “文件” 显示在页面顶部的文字!define MUI_LICENSEPAGE_TEXT_TOP text 显示在页面底部的文字!define MUI_LICENSEPAGE_TEXT_BOTTOM text 按钮方式时按钮上的文字!define MUI_LICENSEPAGE_BUTTON button_text

用户需要钩选该 checkbox 来接受软件许可!define MUI_LICENSEPAGE_CHECKBOX 在 checkbox 旁显示的文字!define MUI_LICENSEPAGE_CHECKBOX_TEXT text

钩选radio box 接受或拒绝许可!define MUI_LICENSEPAGE_RADIOBUTTONS

radio旁接受文字!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT text radio旁拒绝文字!define MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE text 组件选择页面 顶部文字!define MUI_COMPONENTSPAGE_TEXT_TOP text 组件旁文字!define MUI_COMPONENTSPAGE_TEXT_COMPLIST text 下拉框旁文字!define MUI_COMPONENTSPAGE_TEXT_INSTTYPE text 描述框顶部文字!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE text

无组件描述框文字!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO text 安装目录页面 页面顶部文字!define MUI_DIRECTORYPAGE_TEXT_TOP text 路径选择框上文字!define MUI_DIRECTORYPAGE_TEXT_DESTINATION text 存放用户选择的目录的变量,默认是 $INSTDIR !define MUI_DIRECTORYPAGE_VARIABLE variable

不禁用\下一步\按钮!define MUI_DIRECTORYPAGE_VERIFYONLEAVE 安装进度页面

页面头上的文字!define MUI_INSTFILESPAGE_FINISHHEADER_TEXT text 进一步说明!define MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT text 完成页面 页面标题!define MUI_FINISHPAGE_TITLE title 页面标题区的额外空格!define MUI_FINISHPAGE_TITLE_3LINES 显示在完成页面上文字!define MUI_FINISHPAGE_TEXT text 使checkbox 时,设定文本区额外空间!define MUI_FINISHPAGE_TEXT_LARGE

完成按钮的显示文字!define MUI_FINISHPAGE_BUTTON text

重启操作系统 checkbox 旁的文字!define MUI_FINISHPAGE_TEXT_REBOOT text 显示在'Reboot now'旁的文字!define MUI_FINISHPAGE_TEXT_REBOOTLATER text 指定checkbox 选择运行的应用程序!define MUI_FINISHPAGE_RUN exe_file

程序 checkbox 旁的文字!define MUI_FINISHPAGE_RUN_TEXT text

运行应用程序的参数!define MUI_FINISHPAGE_RUN_PARAMETERS parameters 指定checkbox 为非选中状态!define MUI_FINISHPAGE_RUN_NOTCHECKED

安装完成执行的nsi函数!define MUI_FINISHPAGE_RUN_FUNCTION function_name checkbox 选择查看文件网站!define MUI_FINISHPAGE_SHOWREADME file/url 用户可及点击的超链上的文字!define MUI_FINISHPAGE_LINK link_text

超链上文字的颜色,默认为 000080!define MUI_FINISHPAGE_LINK_COLOR 第二部分问题及我的方法 1、组件选择部分问题 组件的显示:组件的显示是根据section 定义的顺序,显示的是section的标题,若选择为空,如section “” sec01,它将不会显示在组件选择中。若要实现必选只要在section内定义SectionIn RO即可。 2、安装路径的问题 需要用到两个内置变量$INSTDIR 若要改变安装路径,只需要将安装路径写到注册表中,下次便能方便得读取; 写入注册表:!define PRODUCT_UNINST_ROOT_KEY \

WriteRegStr HKLM \ersion\\Uninstall\\${PRODUCT_NAME}\\$INSTDIR ;写入注册表

InstallDirRegKey HKLM \ersion\\Uninstall\\${PRODUCT_NAME}\\ ;读取安装路径键值

若要允许安装在根目录下,需要指定:AllowRootDirInstall true

$INSTDIR指定了默认的安装路径,若安装路径呗修改,注册表将会记录修改后的路径,$INSTDIR的值也成为修改后的路径值。

若你需要在安装路径的末尾添加文件夹可用StrCpy $INSTDIR \文件夹名\

若用户所在文件夹中已经存在,如修改后会变成 D:\\111\\111,此时你若只需要一个111,你可以先判断是否存在111文件,判断方为修改后的安装路径名最后几个字符是否与文件名字符想同,相同就不添加文件夹,不相等就自动添加文件夹:

代码: WriteRegStr HKLM \ersion\\Uninstall\\${PRODUCT_NAME}\\$INSTDIR ;写入注册表

StrCpy $1 $INSTDIR \ ;截取最后11个字符

${IF} $1 != \ ;判断是否安装在”ni hao”文件中

StrCpy $INSTDIR \ ;不是,则自动创建文件 ${EndIf}

SetOutPath \ SetOverwrite ifnewer ;覆盖

3、后台执行文件 用nsExec::ExecToLog即可,后面直接加可执行文件 4、快捷方式的创建 添加到开始菜单 CreateDirectory \

CreateShortCut

\ CreateShortCut \卸载.lnk\\

创建桌面快捷方式 CreateShortCut \创建快速启动项 CreateShortCut \\

开机立即启动

CreateShortCut \\\5、自定义页面 很多人想要在完成页面添加多个运行程序,但是NSIS默认的只能添加一个,因此,一般我们都采用自定义页面实现,我也不例外。自定义页面需要编写.ini脚本文件 一般的格式为 [Settings]

NumFields=3 ;几个小版块 State=0

CancelEnabled=1 NextButtonText=完成

[Field 1] Type=label

Text=\文字版块,可以不添加。 Left=0 ;位置设定 Right=-1 Top=0 Bottom=20

HWND=4981706 ;窗口句柄指定,科以不指定 。。。

使用时,读取并判断checkbox多选框的状态,以执行响应的文件 ReadINIStr $0 \获取checkbox状态 ${If} $0 = 1

CreateShortCut \\\

${EndIf}

我在使用了自定义页面后,曾出现安装完成后出现”下一步”按钮,只有点击”下一步”后才能进入到完成页面。此时我的结局办法是添加语句:AutoCloseWindow true ;安装完毕自动关闭程序 6、安全卸载 NSIS的安装包中未定义安全卸载所需要的插件,一般可以下载插件,也可以下载官方提供的-log.zip文件,替换原安装文件,里边有三个文件。 我的下载地址:http://download.csdn.net/detail/cnmbitch/4154974

下载完成后,添加文件!include \

; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)

Section \ LogSet on SectionEnd

; 根据安装日志卸载文件的调用宏 !macro DelFileByLog LogFile ifFileExists `${LogFile}` 0 +4 Push `${LogFile}` Call un.DelFileByLog Delete `${LogFile}` !macroend

Section Uninstall ;!insertmacro MUI_STARTMENU_GETFOLDER \$ICONS_GROUP

Delete \

; 调用宏只根据安装日志卸载安装程序自己安装过的文件 !insertmacro DelFileByLog \ ; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 /r 参数,否则会失去 DelFileByLog 的意义) ;RMDir \

; 调用宏只根据安装日志卸载安装程序自己安装过的文件 !insertmacro DelFileByLog \

; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 /r 参数,否则会失去 DelFileByLog 的意义) 其他另外生成的可在此处删除,如登录软件后生成的

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} \ SetAutoClose true SectionEnd

; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改 Function un.DelFileByLog Exch $R0 Push $R1 Push $R2 Push $R3

FileOpen $R0 $R0 r ${Do}

FileRead $R0 $R1

${IfThen} $R1 == `` ${|} ${ExitDo} ${|} StrCpy $R1 $R1 -2 StrCpy $R2 $R1 11

StrCpy $R3 $R1 20

${If} $R2 == \ ${OrIf} $R2 == \

${OrIf} $R3 == \ ${OrIf} $R3 == \ Push $R1 Push `\

Call un.DelFileByLog.StrLoc Pop $R2

${If} $R2 != \

IntOp $R2 $R2 + 1 StrCpy $R3 $R1 \ Push $R3 Push `\

Call un.DelFileByLog.StrLoc Pop $R2

${If} $R2 != \

StrCpy $R3 $R3 $R2 Delete /REBOOTOK $R3 ${EndIf} ${EndIf} ${EndIf}

StrCpy $R2 $R1 7

${If} $R2 == \ Push $R1 Push \

Call un.DelFileByLog.StrLoc Pop $R2

${If} $R2 != \

IntOp $R2 $R2 + 2 StrCpy $R3 $R1 \ Delete /REBOOTOK $R3 ${EndIf} ${EndIf} ${Loop}

FileClose $R0 Pop $R3 Pop $R2 Pop $R1 Pop $R0 FunctionEnd

Function un.DelFileByLog.StrLoc Exch $R0

Exch Exch $R1 Push $R2 Push $R3 Push $R4 Push $R5

StrLen $R2 $R0 StrLen $R3 $R1 StrCpy $R4 0 ${Do}

StrCpy $R5 $R1 $R2 $R4 ${If} $R5 == $R0 ${OrIf} $R4 = $R3 ${ExitDo} ${EndIf}

IntOp $R4 $R4 + 1 ${Loop}

${If} $R4 = $R3 StrCpy $R0 \ ${Else}

StrCpy $R0 $R4 ${EndIf} Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd


NSIS使用说明.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:招生策划要点以及宣传途径

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: