关于Nsis
nsis吧
全部回复
仅看楼主
level 4
金赤狼 楼主
NSIS (Nullsoft Scriptable Install System)是一个Open Source的Windows系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS是通过它的脚 本语言来描述安装程序的行为和逻辑的。NSIS的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。NSIS脚本通常以 nsi为扩展名,支持include功能,头文件扩展名为nsh。NSIS (Nullsoft Scriptable Install System)是一个Open Source的Windows系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS是通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。NSIS脚本通常以 nsi为扩展名,支持include功能,头文件扩展名为nsh。NSIS的主要特点是: 开销小,一个完整功能的安装程序仅需要34k的额外开销。 支持大多数Windows平台,包括:Windows 9.x,Windows NT, Windows 2000, Windows XP, Windows 2003 支持三大压缩算法: Zlig, BZips, LZMA 支持脚本 支持多语言 支持安装界面定制 提供可扩展的插件接口 支持网络安装、补丁 支持无人值守的安装模式 此外,NSIS的license允许任何用途免费使用。 开发一个NSIS的安装程序通常有以下几步:确定安装的功能和界面元素 编写NSIS脚本 使用NSIS提供的makensis或者makensisw程序,将步骤2编写的脚本编译成可执行的安装程序 调试安装程序,如果有问题退到第二步重复 随着NSIS的流行,有一些第三方的NSIS脚本开发环境出现了,如HM NIS Edit,Venis IX前者是完全开源的,后者仅对个人和非商业用途免费。在这些集成开发环境下,步骤2,3可以方便的组合在一起。NSIS脚本的结构NSIS脚本(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。属性用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。页面是指安装程序的向导页面,示例:Page licensePage componentsPage directoryPage instfilesUninstPage uninstConfirmUninstPage instfiles区段是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀,示例如下:Section "Installer Section"SectionEndSection "un.Uninstaller Section"SectionEnd在区段中可以使用很多指令用来完成诸如解压缩文件、读写注册表、创建目录、创建快捷方式等任务,但最常用的指令是SetOutPath和File,前者用于指定目的位置,后者用于指定文件。示例:Section "My Program" SetOutPath $INSTDIR File "My Program.exe" File "Readme.txt"SectionEnd区段名的修饰符/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。SectionIn表示该区段和安装类型之间的关系:SectionIn insttype_index [insttype_index] ... [RO]RO修饰符表示不可修改。子区段用于包含多个区段SubSection [/e] Caption [subsection_name index output]修饰符/e用于该子区段的所有区段是否默认展开。函数包含了模块化的安装逻辑,在nsi脚本中函数分为两种:用户自定义函数和回调函数。用户自定义函数仅当是Call指令调用时才被执行,如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行Call语句和指令。用户自定义函数的语法如下:Function <函数名> # some commandsFunctionEnd函数的调用则使用以下语法: Call <函数名>可见无论是函数的定义还是函数的调用都没有参数传递。通常nsi的参数传递是通过堆栈操作Pop,Push和20个寄存器变量$0~$9, $R0~$R9进行的。也可以通过全局变量完成参数传递。如:
2007年01月06日 02点01分 1
level 4
金赤狼 楼主
Var input ;Var output ;Section bla DeteailPrint "input is $input$\n" Call square DeteailPrint "square of $input is $output$\n"SectionEndFunction square output = input^2FunctionEnd回调函数则是由在特定的时间点触发的程序段。常用的回调函数如.onInit:Function .onInit MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo Abort gogogo:FunctionEndNSIS对于安装逻辑定义以下回调函数:.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、. onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、. onVerifyInstDirNSIS对于卸载逻辑定义以下回调函数:un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbortnsi脚本的变量定义nsi脚本的变量定义用Var关键字,后跟变量名,变量是全局的并且是大小写敏感的。变量引用时需要加上前缀$。除了用户自定义的变量外,nsi脚本中与定义寄存器变量$0~$9,$R0~$R9用于参数传递,以及系统变量用于特定用途,这些变量主要有:$INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE这些变量都是可写的。$PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,${NSISDIR},$WINDIR,$SYSDIR,$ TEMP,$STARTMENU,$SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$ RECENT,$F***ORITES,$MUSIC,$PICTURES,$VIDEOS,$NETHOOD,$FONTS,$TEMPLATES,$ APPDATA,$PRINTHOOD,$INTERNET_CACHE,$COOKIES,$HISTORY,$PROFILE,$ ADMINTOOLS,$RESOURCES,$RESOURCES_LOCALIZED,$CDBURN_AREA,$HWNDPARENT,$ PLUGINSDIRnsi脚本中可用于调试的系统函数有MessageBoxes,DetailPrint,Dumpstate。nsi脚本的编译器指令nsi脚本的编译器指令主要指仅在编译时刻执行的命令。这些命令主要用来包含文件、条件化编译、定义常量、定义宏等。定义常量和宏是编译器指令最主要应用。定义常量的示例:!define VERSION "1.0.3"Name "My Program ${VERSION}"OutFile "My Program Installer - ${VERSION}.exe"定义宏的示例:!macro MyFunc UNFunction ${UN}MyFunc Call ${UN}DoRegStuff ReadRegStr $0 HKLM Software\MyProgram key DetailPrint $0FunctionEndModern UIModern UI是感观上模仿最新的Windows系统的界面风格,它由欢迎页面、结束页面和其他向导页面构成。插件nsi支持插件,通过插件可以方便的扩展NSIS安装程序的功能。NSIS插件是用C++,Delphi等语言编写的dll,在nsi脚本中调用nsi中的函数使用如下语法:DLLName::FunctionName "参数1" "参数2" "参数3"示例1:nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP'执行makensis.exe命令,显示该命令用法。示例2:InstallOptions::dialog "$PLUGINSDIR\test.ini"显示对话框示例3:NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0下载文件NSIS搜索插件的策略默认情况下NSIS在其安装目录的子目录Plugins中搜索插件,用户可以使用!addplugindir指定增加插件的目录位置。nsi脚本的基本语法注释单行注释用井号"#"或分号";",跨行注释用可以用c/C++中注释语法。数据类型数字 数字常量可以用十进制、十六进制(0x为前缀)、八进制(0为前缀)表示,颜色用类似html的中RGB表示法,但去井号"#"。字符串 字符串常量可以用引号引用,转意字符用"$\"作前缀。美元符号、常用转意字符换行、回车、制表符的nsi语法表示分别为:$$,$\n,$\r,$\t续行符 nsi脚本用行尾的反斜杠"\"表示下一行和当前行逻辑上是同一行
2007年01月06日 02点01分 2
level 0
能帮我改个文件吗?我想你告诉我怎么安装的联系一下我这位大哥.QQ: 154794755 电话:
13751887710
何先生
2007年06月08日 02点06分 4
level 0
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeee
2007年06月28日 05点06分 5
level 0
NSIS错误是怎么回事啊
2007年10月31日 17点10分 6
level 0
我使用NSIS制作程序的时候,使用同样的文件生成的安装包,他们的大小却不一样,请高手指点?
2007年11月08日 07点11分 7
level 0
$F***ORITES 应该为:$Favorites
2007年11月16日 08点11分 8
level 0
卸载程序时发生错误:Error launching installer
2007年12月13日 01点12分 9
level 0
引起这个问题的原因很多, 一.软件篇 1.病毒引起,停留在内存,破坏下载文件。 2.是下载工具出错,无法完整下载。 3.你的NSIS格式文件很其他程序冲突。 4.你下载的文件是英文版,需要把缺陷语言改为英文。 二.硬件篇 1.内存出错,是双通道的可能是不兼容,要不是内存松动和灰尘引起,在有就是内存本身就有问题。 2.硬盘有坏道,你下载的东西又正好放在坏道上。 3.主板的问题,交换数据出错引起。 以上的就是引起NSIS的原因,解决办法,你们大家逐步排查吧!
2008年05月10日 00点05分 10
我电脑重装了还是安装不了是不是内存原因?
2014年05月10日 11点05分
level 0
烦
2008年05月29日 04点05分 11
level 1
这么复杂的东西你也贴?有没有具体解决方法哦?
2009年02月04日 12点02分 12
level 0
有谁知道nsis里面定义对话框样式的ini文件的格式??
知道的能否赐教阿?
QQ 24073487, 谢谢!!
2009年04月09日 02点04分 13
level 1
哈哈
点击查看解决方案:
http://hi.baidu.com/xiaodehua/blog/item/b4751b01dda10c0f7aec2c59.html
中国神华
2009年04月28日 06点04分 14
level 0
可以封装播放器的,我们网站http://www.qiutv.com就打算用这个来封装
2009年07月06日 18点07分 15
level 0
怎么解决!!!!
2009年07月08日 09点07分 16
level 1
http://www.dreams8.com/?fromuid=30101
nsis论坛。。。大家可以去看看啊。。。很多脚本的。。。
2009年09月22日 01点09分 17
level 4
废物NSIS。。
2010年01月15日 16点01分 18
level 1
废物NSIS。。
2010年07月10日 08点07分 19
level 0
The installer you are trying to use is corrupted or incomplete
你试图去运用的这个安装被破坏或者不完善.
This could be the result of a damaged disk, a failed download or a virus.
这是磁盘被损坏或者文件下载失败或者病毒导致的.
You may want to contact the author of this installer to obtain a new copy
你可以去联系开发商去弄一个新的.
It may be possible to skip this check using the/NCRC command line switch
他可能是用了 NCRC 命令行跳过了检测.
(NOT RECOMMENDED)
(不推荐)

2010年07月19日 04点07分 20
level 7
$FAVORITES 也屏蔽?
2010年10月23日 08点10分 21
1 2 尾页