全方位掌握nsis脚本

NSIS 确实是一个不错的安装程序制作软件。新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框。
不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本。 而 NSIS 的脚本指令是在是太多了,有时候觉得好像又回到了学习 C
语言的年代。他丰富而起强大的功能甚至 可以编译出一些小而使用的软件(例如查找窗口句柄,然后...) 好了,不多说。我在这里着重介绍关于 NSIS
的一些使用问题以及新界面安装程序的制作过程,中间会附上一个 示例脚本。 这里只说单语言的简体中文 1. NSIS的运行问题 2.0a7 的 NSIS
安装在长文件名的目录中好像会有问题(Win2k 和 WinXP 下,Win98 下好像没问题)。你若是将 NSIS
安装在类似于“E:/System/Installer/NSIS 的目录中”(其中的“Installer”是超过了 8 个字符的长文 件名),运行
makensisw 或是直接在命令提示符中使用 makensis 可能会非法操作。 解决的办法是:在命令提示符下使用如下指令: cd
E:/System/Instal~1/NSIS 进入 NSIS 安装目录后使用命令行: makensis /CD /X"Compressor bzip2"
"f:/1.nsi" 你可以在脚本文件中使用了“SetCompressor bzip2”指令,这样就可以去掉“/X"Compressor bzip2"”参数。
使用 makensisw 的朋友我就不多说了,你可以从我上面的分析中得到点启发。自己设置一下它的运行参数吧! 不过 makensisw 也有 Bug,若用
makensisw 编译时发现脚本错误,程序就立马非法操作。 2. 关于脚本的整体布局 说 NSIS 有些象高级语言的语法一点没错。NSIS
的语法非常注重先后顺序(我曾经为了一个指令的先后顺序来 回 Ctrl+C & Ctrl+V 了 N 次)。
例如象它的帮助文件中提到的“SetFont”指令必须在“AddBrandingImage”指令之前等。我在这里要说的而是
关于如何正确的对脚本进行整体布局,使其能更加合理、高效的被使用,这样才有利于日后的安装程序更新 你可以用我后面的示例脚本为模板制作自己的 NSIS 脚本。
大体布局如下: //////////////////////////////////////////////////////////////
预设参数(包括外部压缩器选择、编译选项、宏定义以及文件包含等) 普通安装设置 自定义函数 安装程序区域内容 安装程序回调函数及其相关函数定义 卸载程序区域内容
卸载程序回调函数及其相关函数定义 //////////////////////////////////////////////////////////////
3. 关于安装程序 Logo 画面的说明: 先前版本的 NSIS 使用 splash.exe 制作 logo画面,但若您使用 2.0a7,
我建议您使用(好像也只能使用)magiclime.exe,它在 Win2k 和 WinXP 下显示 logo画面时会有淡入淡出的效果。超 Cool.... 4.
关于标牌位图(即显示在安装程序对话框中的自定义位图)的说明: 2.0a7 提供了宏指令用于在安装程序的对话框中显示标牌位图。当然你也可以用标准的 NSIS
指令。 5. 关于使用新的 Modern UI 界面的说明: 2.0a7 同样提供了宏指令使你可以使用全新的安装界面: 首先你需要安装 NSIS v2.0a7
简体中文补丁(汉化新世纪有下载): 然后打开安装目录下的 Examples/Modern UI/ModernUI.nsh 文件,将从 !macro
MUI_INTERFACE UI ICON UNICON CHECKS PROGRESSBAR 到第一个 !macroend
之间的注释符(即分号)删除(若没有这步究省了)。保存。 接下来就可以在你自己的脚本中使用形式对话框了,并且支持 WinXP 的新的视觉效果样式。 6.
以下是我的示例脚本:
////////////////////////////////////////////////////////////////////////////
; study.nsi ; ; 以下脚本用以生成 study.exe 文件 ; 它包含有授权协议 ; ;
安装时若发现应用程序正在运行,安装程序会提示并替用户关闭应用程序 ; 安装成功后会自动运行应用程序 ; ; 启用新的 Modern UI
的宏指令语法,原先的部分指令将被禁止以防止重复 ; 我会尽量展示如何基本指令的用法。当然宏指令也会与一些基本指令发生重 ; 复定义的情况,不过 NSIS
照样能编译成功. ; 其中的一些路径、文件你可以根据需要更改
; 启用外部压缩工具(这里我们不用,原因看第 10 步) ;!define
HAVE_UPX
; 若启用了外部压缩工具,这进行可执行文件头的压缩 !ifdef HAVE_UPX ; 用 UPX
压缩可执行文件头(用其他的相关工具也行) !packhdr tmp.dat "E:UPX/upx --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}/Examples/WinMessages.nsh" ;
包含新界面的宏指令文件 !include "${NSISDIR}/Examples/Modern UI/ModernUI.nsh" ; 包含标牌位图宏指令文件
!include "${NSISDIR}/Examples/branding.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}/Contrib/UIs/modern2.exe" ; 启用 WindowsXP 的视觉样式 XPStyle on ;设置字体
SetFont 宋体 9 ; 标题名称 Caption /LANG=2052 "全方位掌握 NSIS 的使用" ; 标牌的内容 BrandingText
/LANG=2052 /TRIMCENTER "Shao Hao" ; 安装程序图标 Icon "F:/12/QCDIcon.ico" ; 安装程序显示标题
WindowIcon  on ; 添加标牌位图(放在顶部用 TOP 参数。后面接高度) AddBrandingImage LEFT 105 ;
设定渐变背景 BGGradient off ; 设置安静安装模式 ;SilentInstall normal ; 设置安静卸载模式
;SilentUnInstall normal ; 执行 CRC 检查(最好用 on 打开。关闭是因为还要修改安装程序,看第 10 步) CRCCheck
off ; 加载相应的语言文件 LoadLanguageFile "${NSISDIR}/Contrib/Language
files/SimpChinese.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
"$PROGRAMFILES/QCD 3" ; 如果可能的化从注册表中监测安装路径 InstallDirRegKey HKLM /
     
         
"Software/Microsoft/Windows/CurrentVersion/Uninstall/NSIS" /
     
          "UninstallString" ;
授权协议页面 LicenseText /LANG=2052 "NSIS 是免费软件。安装前请先阅读以下协议条款" "我同意" ; 使用授权协议文本
LicenseData /LANG=2052 "F:/12/License.txt" ; 设置授权协议页面的背景色 ;LicenseBkColor
000000 ; 选择要按安装的组件 ComponentText /LANG=2052 "现在将安装 ${NAME_FULL}到您的计算机:"
"请选择安装类型" "或选择您希望安装的组件" InstType "完全安装(都在了)" InstType "典型安装" InstType
/LANG=2052 /CUSTOMSTRING=自定义 ;InstType /LANG=2052 /NOCUSTOM ;InstType
/COMPONENTSONLYONCUSTOM CheckBitmap "${NSISDIR}/Contrib/Icons/modern.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:/12/UnQCDIcon.ico" ; 替换卸载程序标题的文字
UninstallCaption /LANG=2052 "卸载 ${NAME}" ; 替换卸载程序每页按钮的文字 UninstallSubCaption
/LANG=2052 0 ":确认" UninstallSubCaption /LANG=2052 1 ":正在删除文件"
UninstallSubCaption /LANG=2052 2 ":完成" ; 卸载程序显示方式 ShowUninstDetails hide ;
替换“卸载”按钮的文字 UninstallButtonText /LANG=2052 "卸载"
; 安装程序内容及其相关的回调函数 ; 安装程序内容
Section /e "!主要程序(必须安装)" SecCore SectionIn 1 2 RO ; 设置输出路径,每次使用都会改变
SetOutPath $INSTDIR ; 循环包含目录下全部内容 File /r "F:/12/1/*.*" ; 只包含一个文件 File
"F:/12/gf.gif" ; 处理动态连接库文件 IfFileExists "$INSTDIR/1.dll" 0 NoFile1 ; 取消组件注册
UnRegDll "$INSTDIR/1.dll" Delete "$INSTDIR/1.dll" NoFile1: File "F:/12/1.dll"
; 注册组件 RegDLL "$INSTDIR/QCDIconMgr.dll" ; 写入软件注册键值 WriteRegStr HKLM
"Software/NSIS/NSIS" "" "$INSTDIR" ; 为 Windows 卸载程序写入键值 WriteRegStr HKLM
"Software/Microsoft/Windows/CurrentVersion/Uninstall/NSIS" "DisplayName"
"NSIS(只用于移除)" WriteRegStr HKLM
"Software/Microsoft/Windows/CurrentVersion/Uninstall/NSIS" "UninstallString"
"$INSTDIR/uninst.exe" ; 写入生成卸载程序(可多次使用) WriteUninstaller "$INSTDIR/uninst.exe"
SectionEnd Section /e "扩展(可选)" SecUpdate SectionIn 1 SetOutPath
"$INSTDIR/Plugins" File "F:/12/qcdplus/Plugins/2.dll" File /r
"F:/12/qcdplus/Plugins/3" SectionEnd SubSection /e "选项" SecOptions Section /e
"创建桌面图标" SecDesktopShortCut    SectionIn 1 2   SetOutPath
"$INSTDIR/Plugins"    CreateShortCut "$DESKTOP/NSIS.lnk"
"$INSTDIR/gf.gif"    WriteUninstaller "$INSTDIR/uninst.exe"
SectionEnd Section /e "创建快速启动栏图标" SecQuickbarShortCut    SectionIn 1
2    SetOutPath "$INSTDIR/Plugins"   CreateShortCut
"$QUICKLAUNCH/NSIS.lnk" "$INSTDIR/gf.gif"    WriteUninstaller
"$INSTDIR/uninst.exe" SectionEnd Section /e "创建 NSIS 程序组" SecShortCutGroup
   SectionIn 1 2    SetOutPath "$INSTDIR/Plugins"  
CreateDirectory "$SMPROGRAMS/NSIS"    CreateShortCut "$SMPROGRAMS/QCD
Player/gf.lnk" "$INSTDIR/gf.gif"    WriteUninstaller
"$INSTDIR/uninst.exe" SectionEnd SubSectionEnd Section "-Run"; 运行 ExecWait
"$INSTDIR/2.exe" -p WriteINIStr "$INSTDIR/NSIS.ini" "2" "Language" "Chinese"
Exec "$INSTDIR/2.exe" ExecShell open "$INSTDIR/汉化说明.htm" SectionEnd Section ""
;Invisible section to display the Finish header !insertmacro MUI_FINISHHEADER
SetHeader SectionEnd
; 安装程序初始化设置 Function .onInit ; 发现有程序正在运行时提示退出后继续运行
loop: FindWindow $R0 "NSIS" IntCmp $R0 0 done    MessageBox
MB_OKCANCEL /
             
"NSIS 正在运行。$/n点击“确定”按钮会关闭 NSIS 然后继续安装,点击“取消”按钮将退出安装程序" /
             
IDOK NoAbort   Abort NoAbort:    SendMessage $R0 1029 0 0 ;
稍等后继续检测直至检测不到或用户选择取消   Sleep 444    Goto loop done: ; 显示 Logo
画面 SetOutPath $TEMP
File /oname=qcd_logo.bmp "F:/12/logo.bmp" File
/oname=magiclime.exe "${NSISDIR}/Bin/magiclime.exe" ExecWait
"$TEMP/magiclime.exe" qcd_logo.bmp Delete "$TEMP/magiclime.exe" Delete
"$TEMP/qcd_logo.bmp" ; 初始化标牌位图 !insertmacro BI_INIT $R0 FunctionEnd ;
安装程序主界面的相关文本 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_END FunctionEnd ;
初始化安装程序对话框的显示文本 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_END FunctionEnd ; 转到下页面时的处理 Function .onNextPage
!insertmacro MUI_NEXTPAGE_OUTER !insertmacro MUI_NEXTPAGE SetHeader  ;
标牌位图设置 !insertmacro BI_NEXT FunctionEnd ; 转到上一页面时的处理 Function .onPrevPage
!insertmacro MUI_PREVPAGE ; 标牌位图设置 !insertmacro BI_PREV FunctionEnd ;
鼠标移到指定组件时的显示处理 Function .&#111nMouseOverSection ; 用宏指令设置安装自己的注释文本 !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_END FunctionEnd ; 安装成功完成后的设置 Function .onInstSuccess ; 自己加吧:)
FunctionEnd ; 放弃安装时警告窗口的显示信息 Function .onUserAbort !insertmacro
MUI_ABORTWARNING 2052 "你确定要推出 ${NAME} 的安装吗?" !insertmacro MUI_ABORTWARNING_END
FunctionEnd ; 安装程序标牌位图列表 !insertmacro BI_LIST !insertmacro BI_LIST_ADD
"F:/12/Brand1.bmp" /RESIZETOFIT !insertmacro BI_LIST_ADD "F:/12/Brand2.bmp"
/RESIZETOFIT !insertmacro BI_LIST_ADD "F:/12/Brand3.bmp" /RESIZETOFIT
!insertmacro BI_LIST_END
; 卸载程序及其相关回调函数 ; 卸载程序内容 Section "Uninstall"
ExecWait "$INSTDIR/12.exe" /un ; 循环删除文件直至删除文件夹 RMDir /r "$SMPROGRAMS/NSIS"
UnRegDLL "$INSTDIR/2.dll" Delete "$INSTDIR/QCDIconMgr.dll" Delete
"$INSTDIR/*.*" DeleteRegKey HKLM "Software/NSIS" DeleteRegKey HKLM
"Software/Microsoft/Windows/CurrentVersion/Uninstall/NSIS" MessageBox
MB_YESNO|MB_ICONQUESTION /
           
"是否连插件目录也要删除?$/n(若您要保留这些文件,请点击下面的“否”按钮)" /
            IDNO NoDelete
; 全删光!!! RMDir /r "$INSTDIR" NoDelete: SectionEnd
; 定义卸载程序标牌位图 !define
BI_UNINSTALL !include "${NSISDIR}/Examples/branding.nsh" ; 初始化卸载程序对话框的设置
Function un.onInit ; 初始化标牌位图 !insertmacro BI_INIT $R0 FunctionEnd ;
卸载程序主界面的相关文本 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_END FunctionEnd ; 初始化卸载程序对话框时的处理
Function un.onInitDialog ; 自己加:) FunctionEnd ; 卸载程序转到下一页时的处理 Function
un.onNextPage !insertmacro MUI_NEXTPAGE_OUTER !insertmacro MUI_NEXTPAGE
un.SetHeader ; 标牌位图设置 !insertmacro BI_NEXT FunctionEnd ; 卸载程序完成时的处理 Function
un.onUninstSuccess ; 再加^_^ FunctionEnd ; 放弃卸载程序时的处理 Function un.onUserAbort
FunctionEnd ; 卸载程序标牌位图列表 !insertmacro BI_LIST !insertmacro BI_LIST_ADD
"F:/12/UnBrand1.bmp" /RESIZETOFIT !insertmacro BI_LIST_ADD "F:/12/UnBrand2.bmp"
/RESIZETOFIT !insertmacro BI_LIST_END
; 结束
/////////////////////////////////////////////////////////////////////////////
7.注意两个标牌位图列表宏指令必须放置到函数的后面,就像我编写的那样,安装程序的标牌位
图列表放置到到所有安装程序回调函数的后面;卸载程序的标牌位图列表放置到所有卸载程序回 调函数的后面。
关键是要注意整体布局(这样才不会看迷糊),当然若编译不能通过,就要进行合适的调整。 8. 使用指令: makensis /CD f:/study.nsi"
进行编译(这个示例脚本我没试过-_-,若编译无法通过只好自己动手研究研究了。我放出来只是用于参考学习) 9. 还没完—— NSIS
对多语言的支持还是不够完美(注意:是完美——有点鸡蛋里挑骨头的味道)。 我们继续: 用 ExeScope (其他的资源编辑器也行,别说你没有)打开生成的
study.exe 文件,找到对话框资源的 105 项 目。你会发现有一块很明显的用以显示标牌位图的控件。因为 NSIS
在插件此控件时是使其保持于授权协议文件 控件等高的,所以当使用用 modern2.exe 对话框模板时会与对话框顶部多出 45 的距离——不罗嗦了,总之根据
需要搞得好看就行(别过火!)。 顺便提一下,NSIS 安装目中的 Contrib/UIs 子目录下提供了多种对话框模板,你可以自行选用(就是用
ChangeUI 指令或用宏指令),甚至根据需要用资源编辑器修改模板资源。 接着修改:找到 111
项,把里面的资源汉化掉(新的界面居然没有对此对话框的多语言支持!这个对话框只有在 大容量的安装程序执行时才显示)。 用 ExeScope 更新后,再用 Hex
WorkShop 打开我问可怜的试验品——study.exe,查找字符串 “unpacking data: ”(没引号的,你别瞎加。找不到别怪我
$_$)。找到后处理一下,用“正在解压缩数据:” 替换(正好 8 个字符 Yeah!)。 10. 现在我要说为什么不启用 UPX 压缩以及关闭 CRC 检测:
用 UPX 压缩可执行文件头或启用 CRC 检测(起用的话就是打开了自校验),我们的 ExeScope
就无用武之地了。但关于CRC校验又有些特别:使用者可以在命令行提示符下使用 /NCRC
开关参数执行安装程序,例如:若安装程序得文件名为“setup.exe”,那么就在命令行提示符下键入“setup.exe /NCRC”就可跳过 CRC
校验执行安装程序(但如果你将CRCCheck指令的参数设置为force的话,就什么办法也没了),但这样对使用者而言比较麻烦。
至此全部完工。
若有任何语法难点,请参阅 NSIS
的帮助文件(有了中文版的应该方便些吧!)。内有上千字的详细说明(可能更多,我也没统计过)。还有一些指令我没有用上,因为那些不太可能用的上。
这个示例脚本已能作出较佳的安装程序界面,大家看看我为 QCD v3.40B35 做的安装界面。


编译脚本非法操作的问题我也见识过了~!我也有个偏方~!在编译时按住该运行窗口不放,直到运行结束(有时会不显示运行状态,自行判断时间吧),这个方法屡试不爽~!:)
2.0a7依然支持splash.exe 编写启动logo哦~! 指令如下:
Function .onInit SetOutPath $TEMP File /oname=spltmp.bmp "F:/My
Documents/hanzify1.bmp" ; optional ; File /oname=spltmp.wav
"my_splashshit.wav" File /oname=spltmp.exe "${NSISDIR}/bin/splash.exe"
ExecWait "$TEMP/spltmp.exe" 1000 $HWNDPARENT $TEMP/spltmp Delete
$TEMP/spltmp.exe Delete $TEMP/spltmp.bmp ; Delete $TEMP/spltmp.wav
FunctionEnd
另外,我建议把简体中文语言包和一些常用宏指令文件里的语言设置改为2052,就可以在编脚本时偷懒一点啦~!同时显示效果也要好一些

全方位掌握nsis脚本,码迷,mamicode.com

时间: 2024-08-03 11:18:04

全方位掌握nsis脚本的相关文章

win7平台下QT软件的打包与发布 (利用NSIS脚本制作安装包)

接上文:http://blog.csdn.net/shallen320/article/details/44915649 上文介绍了如何查找Qt程序依耐性,如何利用NSIS 和 .zip文件制作简单的压缩包.上文所用的方法制作的安装包十分简单,连创建桌面快捷方式都没有.本文介绍如何使用NSIS脚本语言制作一个略微复杂的安装包. 下面是我使用的NSIS脚本语言范例,含有简单全面的功能,包括: 设置安装文件版本,公司,版权信息 安装拷贝指定文件 创建开始菜单,桌面快捷方式 创建卸载程序,并能在win

NSIS脚本入门和进阶方法

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.对于新手来说,它有安装包程序制作的引导,可以简单快速的制作完成一个程序安 装包:对于老鸟来说,如果学会了NSIS的一些基本操作,能使用脚本语言,阅读NSIS帮助文档,那么也能制作出漂亮堪比搜狗.腾讯的安装包界面的安装程序. 如果你从未接触过NSIS或者NSIS基础很薄弱,按照我下边的方法,保你一个星期掌握NSIS脚本

NSIS

NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System) 的缩写,它是一个免费的 Win32 安装.卸载系统,采用了简洁高效的脚本方式.它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件发布的系统,但现已被上百个应用程序所应用,作为它们进行程序发布的工具. NSIS 创建的安装程序可以进行安装.卸载.设置系统设置.解压文件等等.几乎可以做所有事情.因为它基于脚本文件,所以您可以完全控制您的安装程序的每个

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间:2005-02-15 点击:70791 raindy NSIS简介: NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装.卸载系统,它的特点:脚本简洁高效:系统开销小:当然进行安装.

NSIS 2.0界面快速入门

NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS 的宏来表达,指定 MUI 的属性需要使用宏.所以,诸如 LicenseText, Icon, CheckBitmap, InstallColors 在 MUI 中失去意义. MUI 的内置向导页面 和安装程序有关的向导页面 MUI_PAGE_WELCOME 该向导页面显示欢迎信息 MUI_PAGE

使用NSIS 打包程序

1 NSIS版本为2.45的中文版本. 2 启动程序后界面显示为: 3 安装效果图: 下面是代码: ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 !define PRODUCT_NAME "ImageConvert" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "huangtao" !define PRODUCT_WEB_SITE &quo

NSIS 的简介

NSIS (Nullsoft Scriptable Install System)是一个Open Source的Windows系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.这如其名字所指出的那样,NSIS是通过它的脚本语言来描述安装程序的行为和逻辑的.NSIS的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的.NSIS脚本通常以 nsi为扩展名,支持include功能,头文件扩展名为nsh. NSIS的主要特点是:   开销小,一个完整功能的

NSIS对话框单位造成的控件移位问题

在使用NSIS脚本开发安装卸载程序,使用自定义的nsdialog控件.发现在小部分系统上安装时,一些控件会消失,或者挪位.于是排除问题,看看这些控件的为位置和坐标,发现基本上是使用了对话框单位的控件,才会出现这种问题. 看来在这些出问题的系统里,1对话框单位对应更多的像素.下边插讲下NSIS的nsdialog库里的三种单位. ======================================================================================

用 NSIS 制作安装程序

用 NSIS 制作安装程序 最近要给自己写的一个小程序做个安装程序.我的程序是用Qt开发的,所以本来想研究一下 Qt Installer Framework. 但是用 Qt Installer Framework 做安装程序好像还挺麻烦,研究了一会儿没有什么头绪,所以就暂时放弃了.然后就在网上随便搜了搜,发现有个 NSIS,看介绍还比较简单,就试着用了用,感觉还可以.这篇其实就是我学习 NSIS 时的一个学习笔记. NSIS(Nullsoft Scriptable Install System)