NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
NSIS简介:
NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装、卸载系统,它的特点:脚本简洁高效;系统开销小;当然进行安装、卸载、设置系统设置、解压文件等等更不在话下,几乎可以做所有的事情。更多的功能请阅读蓝色网际的《NSIS帮助文档》。
对于制作NSIS的使用教程,蓝色网际是NSIS方面的专家,她的《NSIS帮助文档》就是一本NSIS的圣经,而对初学者来说,最头疼的莫过于一大堆看不懂的代码,对他们来说无异于一本天书。缘于此,特草此基础教程,希望NSIS专家们勿见笑,不当之处欢迎批评指正以期完善,也希望给初学者作个铺垫。
工具:
NIS Edit+Nullsoft Installation System(NSIS)
[此两款软件都可以到世纪主站上下载到]
思路:脚本向导+修改代码=个性化安装包
步骤:
I.利用向导制作安装包:
1.安装上述两款,启动NIS Edit,在“文件”菜单中“新建脚本:向导”=>下一步”,如图1:
附图
2.设置应用程序信息,如软件名称、版本、出版人等,如图2。
当然最一个网站可以留空,如果设置了,则安装包会生成一个对应网址的“Internet 快捷方式”。
附图
3.设置程序选项,如安装包图标、安装程序文件、安装包语言[这里选“SimChinese”]、用户图形界面及压缩方式等,
我们可以选用默认值,也可以点击对应项目的按钮或下拉菜单更改设置,如下图3
附图
4.设置安装目录及授权信息,如图4后“下一步”:
附图
5.选定程序文件,即我们要打包的文件,可以使用默认的“Mainsection”,
也可以根据需要进行更改或新建组别,
如果组比较多时,
你也可以设置是否“允许用户选择要安装的组件”,如图5。
附图
完毕后进行“添加文件”操作,选定我们要打包的文件,如图6,
完成自动后返回的图5的界面,执行下一步操作。
附图
6.设置开始菜单中文件夹名称及快捷方式,这里我们使用默认值,如图7,按“下一步”:
附图
7.指定安装后要运行的程序,同上用默认值并设置相关运行参数及描述,
如果你和我一样懒的话,或不想在安装运行任何程序,则留空即可,如图8:
附图
8.这步是有关卸载程序的相关信息,如卸载时的提示、卸载的图标等,如图9
附图
9.至此完成向导,如图10,,钩选“保存脚本”、“转换文件路径到相关路径”及“编译脚本”
附图
提示保存脚本路径并自动编译脚本,我们可以按或F9运行安装程序进行预览,向导产生的安装包效果图如图11所示:
附图
II.修改代码以个性化安装包:
10.选择可修改之处:
1)软件LOGO[如图11A]、安装包标题[图11B]、图11C、图12、图13
图11见上楼
图12如下
附图
图13如下
附图
11.修改代码
1) 修改软件LOGO:在源代码“ MUI Settings”后面添加下列代码:
|
效果图如图14所示
附图
|
注释:\r\n为换行标志
效果图上楼如图14所示
3)修改图11C中的说明,同上位置添加下列代码:
|
效果图如图14所示
|
后添加:
|
效果图如图15所示
附图
|
|
附图
A、普通效果
|
效果图如此软件下载:pdf2all-setup.rar
B、渐隐闪屏
|
7)背景音乐[贯穿安装过程]
|
以上仅是NSIS制作安装包最基本的操作,供初学者入门之用,故云“初级篇”。
希望不会怡笑大方,更希望蓝MM、陈敏毅老大等NSIS高手的中高级教程:)
相关资料下载[以Pdf2allV5.35d为例,可直接点击下载]
全文的Word文档附在附件中
NSIS.rar
制作了安装包制作动画演示
[可直接点击下载]
相关文件列表如下:
动画演示 [pdf2all-movie.exe]
安装包的NSIS脚本代码 [PDF2all-nsis.nsi.txt]
成品的安装包 [pdf2all-setup.exe]
常见修改的代码 [code.txt]
NSIS基础教程CHM版 [NSIS安装制作基础教程(CHM格式)-特别感谢tracky]
感谢chenmy老大提供空间:)
偶的闪屏图:
附图
|
背景音乐(贯穿安装全过程):
|
背景音乐2:
|
raindy
谢谢dujuan509兄
如果闪屏效果[渐隐]+背景音乐[全程]放在一起
那代码该如何修改?
偶两者无法兼得
望不吝赐教
raindy 蓝色网际 附件 蓝色网际 推荐一个 NSIS 的快速编辑器 - NotePad2。虽然不是 NSIS 专门编辑器不过有时候比 Venis 方便,因为 Venis 不支持文本块操作,而且 Venis 对语法高亮做得不是很好。NotePad2 的语法高亮是根据后缀名来确定的,只要你打开 NSI 文件不用任何设置就会自动语法高亮。 其实 NotePad2 作为记事本替代者也非常不过,界面非常相似,而 NotePad2 功能强大了好多。 你可以在 http://foobar.nease.net/nsis/np2.exe 下载我修改的版本,主要补全了 NSIS 语法高亮,原版由于很久没更新 NSIS 的语法高亮代码,所以有一些新增的 NSIS 指令不能高亮显示。 并作了一些优化,做要是让它更像记事本 贴个图: 附图 dujuan509
你指的是选择安装目录页面的提示文字吧?
只需在
前面添加一行:
这个插件支持 JPG、GIF
raindy 有时间的话看看我这个汉化补丁的 NSIS 脚本,然后写一篇教程,嘿嘿,写东西你比较拿手
基本上包括了做补丁包含的大部分情况: NSIS 做补丁的优点是生成文件比较小,而且还可以包含 N 个版本的补丁 raindy
设置了自定义安装图标就会自动显示的,不需要另外添加,自定义安装图标:
这一点和INNO不同,INNO中则需要在[setup]中设置:
其他需要个性化的地方,建议阅读一下蓝色网际翻译的NSIS帮助文档
zkdpower 请问各位如何改这些 第一个就是如何把插入的headerimage图片放到右边(默认是在左边) 第二个就是把headerimage上面的字改掉 谢谢 附图 dujuan509
2、在 !insertmacro MUI_PAGE_LICENSE "c:\License.txt"前增加两行:
蓝色网际 zkdpower 请问蓝色网际,在你的MUI 文档中有
“MUI_HEADERIMAGE_RIGHT 令本应显示于左边的页眉图像显示于右面(当使用 RTL 语言时, 它将会显示于左边而不显示于右边).” 这么一段话,请问何为RTL语言呢,本人愚拙,望指点 蓝色网际 restools venis function 向导功能在 NISEdit 上完整实现,晚上或明天放出,不过需要人帮忙把向导脚本编写完整,因为写程序时只是拿了4个具代表性的 function 来作为测试,这是这次放出版本实现的功能。要知道 NSIS 的 funciton 有这么多啊。
|
显示效果
2.弹出函数编辑窗口:
3.确定后,输入,这里一提的是,输入时,会自动根据上一行代码的缩进,自动在输入的函数行前面添加前导空格,以减少自己再输入前面的空格。
==================
ISS2NSI v1.0a2
==================
ISS2NSI is a tool for convert Inno Setup script files into NSIS script files.
Usage:
==================
Program:
At the command prompt write: iss2nsi issscript.iss [nsiscript.nsi]
if nsiscript.nsi is no specified then the converted script will be
saved with the same name of the issscript.iss but with extension .nsi.
NIS Edit Plugin:
1- Close HM NIS Edit.
2- Put hmne_iss2nsi.dll in the plugins directory
(Default $PROGRAMFILES\HMSoft\NIS Edit\Plugins)
3- Start HM NIS Edit.
4- You will found a new item in the tools menu called "Convert InnoSetup script".
NOTE: Before compile the converted script please check it, because
complete compatibility is NOT available. I design this tool to convert my
Inno Setup scripts and is not tested with more complex scripts.
The source code is included if you want to contribute to the project
for make the converted script 100% compatible with the original.
Please send my your modifications to ranametal@blistering.net
Note that this project is a modification to the Inno Setup 3.0.6
compiler and modifications to the Inno Setup source files are under
the Inno Setup license (see: src\is-src\is-license.txt).
Note: the files in the src\is-src directory are unmodified Inno Setup
source files needed by the Compile.pas unit located in the src directory
---------------------------------------------------------
hmne_iss2nsi.dll 把这个文件放到 NISEdit 目录下的 Plugins 中就可以使用,没有详细测试,不过如果是针对版本的话, Inno Setup 3.0.6 ,估计应该没问题吧。
ISS2NSI.rar
虽然版本太低,用来从 ISS 的脚本转向学习 NSIS 应该容易点吧。
ISS2NSI 源码下载。
没时间去看看它,只是把它编译成了一个DLL。有时间看看它是什么原理。
NISEdit 的增强版本,希望有人来帮帮忙,增加一下函数,否则这个版本也强不到哪里去。
把里面的那些文件放入 NISEdit 的目录中,为了区分原版,程序改名为 VNISEdit。
两个版本可以同时存在,不过你要把 VNISEdit 设为默认编辑器,才可以默认用它来打开。
修正:
1.添加一种菜单的皮肤。
2.增加 NSIS 函数向导功能。(类似 Venis 中的 function 功能)
4.改程序调用帮助时,不要把帮助窗口置顶,因为置顶会令到查看帮助时不能切换会编辑器窗口。
最新功能(区段结构分析)
左图是VNISEdit解释的,右图是Venis分析的。分析对象(makensis.nsi)
全景图:试一下呗,分析速度比 Venis 好很多的。基本上感觉不到视图的闪动。线程实时分析,只要改动代码,视图会立刻作出反应。
请问下面那些问题怎样做的,
1、怎样控制自定义面的“下一步”按钮的可用与不可用
2、怎样为自定义页面上的组件添加Change事件呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本
colonel
蓝色网际
对于控制下一步按钮来说,有三个阶段分别是:页面初始化之前、页面初始化时、页面要关闭时。不同的阶段对应的插入函数不同。
比如要在页面初始化之前禁止下一步按钮,MUI 界面可以这样
以下是代码片段: !define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre !insertmacro MUI_PAGE_COMPONENTS Function ComponentPre |
那“2、怎样为自定义页面上的组件添加Change事件呢”,我自定义了一个配置页面,我想用户在完成配置才可激活“下一步”按钮,这个怎么做的呢
蓝色网际
需要给控件加上 NOTIFY 的标记。
例子在我的签名里有。
需要先了解 GetDlgItem 和 EnableWindow 指令的作用。
colonel
这个问题呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本
怎样使“MUI_PAGE_COMPONENTS”中的树目录只能在点选复选框才被选中呢
蓝色网际
这个用 Resource Hacker 调整一下控件就行了。默认的 UI 文件是 NSIS\Contrib\UIs\modern.exe
到我的签名里下一个特别版的 makensis.exe。
colonel
我不想在组件选择页面中用 onMouseOverSection 来显示 描述 ,如果架设函数可以增加的话,我就想到这个 “回调 onMouseDownSection ”
我是想通过组件目录里的 OnChange 事件来显示
我不懂VC++吖,如果我会的话就可以像MM你那样去改它的代码了
蓝色网际
特别版的就是这样啊,当你点击组件的时候描述区域才会显示或改变。
普通版的只要鼠标移上去就显示了。你没试过吗。
colonel
哦~~~~~~~试到了,原来你是改了onMouseOverSection 回调,对啦,MM你有没有做过 组件的OnChange 事件吗?主要是用在自定义页面上的
是用这个吗?Call shell32.dll::SHChangeNotify
蓝色网际
不知道你说的“组件的 OnChange 事件”是什么意思。
是不是当组件选择更改的时候调用的函数呢?如果是的话那直接使用 Function .onSelChange 就行了。
wq99
各位好:我是新手,
我在看function时,没发现参数的传入。
可能我的思维方式不对。
function Fname
functionend
参数应该怎么传呢?
蓝色网际
NSIS 的函数其实是个假函数,并不能像 C++ 那样传递参数,如果你需要传递参数请使用堆栈。
一个典型的例子请看附录的 Get parent directory。
那如果一个Edit里的内容发生变化,另一个组件也跟关变化,这个Edit 的Change事件去写呢
PS:可能我习惯于使用delphi所以有时说到的组件事件名称与你不一样吧
colonel
那如果一个Edit里的内容发生变化,另一个组件也跟关变化,这个Edit 的Change事件去写呢
PS:可能我习惯于使用delphi所以有时说到的组件事件名称与你不一样吧
蓝色网际
你可以参考一下 NSIS\Contrib\InstallOptions\testnotify.nsi
wq99
File "${LOCATION}\$R0"
$R0是一个文件,结果
说没有这个文件,
File "${LOCATION}\123.exe"
那就可以了。
奇怪,我第一句写错了么?
File "${LOCATION}\${R0}"这样也不对。
蓝色网际
你可以先在资源管理器里看看是否有 $R0 这个文件。一般来说很少有这种不带扩展名的奇怪文件,况且不带扩展名的话很容易被当作目录来处理。
一般来说编译器的报告是正确的,这里有一个测试脚本,你可以试试看。
test.zip
wq99
啊~对不起啊,我没说仔细。
$R0是变量,是从堆栈里Pop出来的。
即123.exe.
File "${LOCATION}\$R0"
即File "${LOCATION}\123.exe"
以下是代码片段: Push "123.exe" …… Function InstallOne Pop $R0 DetailPrint $R0 SetOutPath "$INSTDIR" File "${LOCATION}\$R0" ExecWait ’"$INSTDIR\$R0"’ FunctionEnd |
DetailPrint $R0
是可以打印出 123.exe
改成File "${LOCATION}\123.exe"是可以的。
怎么用$R0就不行了呢?
蓝色网际
File 指令后面的文件必须是编译时当前系统存在的文件,而 $R0 要在编译后才有值当然会出错。变量是运行时才有效的。
如果你想改名的话请使用 File "/oname=目标文件" "本地文件"
oname= 后面的目标文件可以用变量。
arthur810
为什么我的“安装程序语言”里面是空的
如图,请指教,谢谢
注:WinXP SP2简体中文系统
zhp0083
手动指定一次就会有了
以下是代码片段: !insertmacro MUI_LANGUAGE "SimpChinese" |
sjhome
请问NSIS只能添加一个目录下的文件,怎么样能添加所以目录下的文件呢?怎么设置呢?多谢!
如图所示.
只能添加"Counter-Strike Source"目录下的文件,怎么样能添加"Counter-Strike Source下的bin文件,config文件及所以文件夹"呢?
蓝色网际
File 可以使用 /r 或 /x 。