查看完整版本: [-- 【原创】NSIS安装制作基础教程[初级篇] + NSIS 简体 --]

汉化新世纪论坛 -> 安装与补丁 -> 【原创】NSIS安装制作基础教程[初级篇] + NSIS 简体 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

<<   1   2   3   4   5  >>  Pages: ( 5 total )

raindy 2005-01-19 23:02

【原创】NSIS安装制作基础教程[初级篇] + NSIS 简体

QUOTE
NSIS 安装制作基础教程[初级篇] ---> raindy

NSIS 简体中文帮助文档 --->蓝色网际


[quote]请参看汉化教学:
http://teach.hanzify.org/ArticleShow.asp?ArticleID=380


===============================

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:
图像

raindy 2005-01-19 23:03
2.设置应用程序信息,如软件名称、版本、出版人等,如图2。
当然最一个网站可以留空,如果设置了,则安装包会生成一个对应网址的“Internet 快捷方式”。
图像

3.设置程序选项,如安装包图标、安装程序文件、安装包语言[这里选“SimChinese”]、用户图形界面及压缩方式等,
我们可以选用默认值,也可以点击对应项目的按钮或下拉菜单更改设置,如下图3
图像

4.设置安装目录及授权信息,如图4后“下一步”:
图像

5.选定程序文件,即我们要打包的文件,可以使用默认的“Mainsection”,
也可以根据需要进行更改或新建组别,
如果组比较多时,
你也可以设置是否“允许用户选择要安装的组件”,如图5。

图像

完毕后进行“添加文件”操作,选定我们要打包的文件,如图6,
完成自动后返回的图5的界面,执行下一步操作。

图像

6.设置开始菜单中文件夹名称及快捷方式,这里我们使用默认值,如图7,按“下一步”:
图像

7.指定安装后要运行的程序,同上用默认值并设置相关运行参数及描述,
如果你和我一样懒的话,或不想在安装运行任何程序,则留空即可,如图8:
图像

8.这步是有关卸载程序的相关信息,如卸载时的提示、卸载的图标等,如图9
图像

9.至此完成向导,如图10,,钩选“保存脚本”、“转换文件路径到相关路径”及“编译脚本”
图像

提示保存脚本路径并自动编译脚本,我们可以按或F9运行安装程序进行预览,向导产生的安装包效果图如图11所示:
图像

raindy 2005-01-19 23:15
II.修改代码以个性化安装包:

10.选择可修改之处:

1)软件LOGO[如图11A]、安装包标题[图11B]、图11C、图12、图13
图11见上楼
图12如下
图像
图13如下
图像

2)闪屏界面

11.修改代码

1) 修改软件LOGO:在源代码“ MUI Settings”后面添加下列代码:
CODE
!define MUI_WELCOMEFINISHPAGE_BITMAP "G:\temp\ pwr.bmp"

  注释:引号内为位图的路径,位图大小大约为165*298

  效果图如图14所示
图像

2)修改安装包标题,在同上位置添加下列代码:

CODE
!define MUI_WELCOMEPAGE_TITLE "\r\n PDF2all 5.35d 汉化版"
  
  注释:\r\n为换行标志
  
  效果图如图14所示

3)修改图11C中的说明,同上位置添加下列代码:
CODE
!define MUI_WELCOMEPAGE_TEXT "  pdf2all是一个转换器的集合,它能转换包括doc2pdf (Word to PDF),xls2pdf (Excel Sheet到PDF),ppt2pdf(PowerPoint到PDF),mdb2pdf (Access到PDF),ps2pdf(PostScript到PDF),pdf2jpg(PDF到JPEG),pdf2bmp(PDF到BMP),pdf2tiff(PDF到TIFF),pdf2eps(PDF到EPS),pdfMerge(合并PDF文件),pdf2ppt(PDF到PowerPoint)。\r\n\r\n  软件汉化:高芳銮 (Raindy)\r\n\r\n  $_CLICK"

  
  效果图如图14所示

4)对图12中的修改,在源代码:
CODE
ShowInstDetails show
ShowUnInstDetails show


后添加:
CODE
BrandingText " 软件汉化:高芳銮 (Raindy)"


效果图如图15所示
图像
5)在完成添加“汉化说明”,只要在源代码:
CODE
; Finish page

后添加:
CODE
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\汉化说明.txt"
!define MUI_FINISHPAGE_SHOWREADME_TEXT "查看汉化说明"

效果所示

图像

6)闪屏界面,可以在源代码中加入下列代码即可:
A、普通效果
CODE
Function .onInit
SetOutPath $TEMP
File /oname=spltmp.bmp "G:\Temp\Nsisres\splash.bmp"

splash::show 2300 $TEMP\spltmp

Pop $0

FunctionEnd


效果图如此软件下载:http://chenmy.hanzify.org/raindy/pdf2all-setup.exe

B、渐隐闪屏
CODE

Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "G:\Temp\Nsisres\splash.bmp"
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend


7)背景音乐[贯穿安装过程]

CODE
Var hmci
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "G:\Temp\Nsisres\music.mp3" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [说明:源MP3的存放路径]
System::Call 'msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\music.mp3") i .r0'
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call 'user32.dll::ShowWindow(i r0, i 0)'
StrCpy $hmci $0
Functionend

Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend


后语

以上仅是NSIS制作安装包最基本的操作,供初学者入门之用,故云“初级篇”。
希望不会怡笑大方,更希望蓝MM、陈敏毅老大等NSIS高手的中高级教程:)

jyculture 2005-01-19 23:32
用户被禁言,该主题自动屏蔽!

raindy 2005-01-19 23:33
相关资料下载[以Pdf2allV5.35d为例,可直接点击下载]列表如下:
  安装包制作的动画演示  
  安装包的NSIS脚本代码    [如无法下载,请到52楼下载]
  成品的安装包  
  常见修改的代码  
  NSIS基础教程CHM版   [NSIS安装制作基础教程(CHM格式)-特别感谢tracky]

tracky 2005-01-20 01:57
没有WORD 你打包的看不了 5555

自己用打包了一个CHM版本

需要的就下吧

点击下载

西门不败 2005-01-20 12:14
不知道大一点的文件能不能用这个打包阿?

raindy 2005-01-20 12:31
QUOTE(西门不败 @ 2005年01月20日 12时14分)
不知道大一点的文件能不能用这个打包阿?

当然可以
如果要求压缩比例最大
请用7-Zip算法

chenmy 2005-01-20 14:59
初学者推荐使用 NIS EDIT 的向导模式,不过向导模式无法实现复杂的组件设置。现在我一般都是在 NIS EDIT 中,手工编辑。

raindy 2005-01-20 15:07
偶以Pdf2allV5.35d为例,
制作了安装包制作动画演示

[可直接点击下载]

相关文件列表如下:
动画演示   [pdf2all-movie.exe]

安装包的NSIS脚本代码   [PDF2all-nsis.nsi.txt]

成品的安装包   [pdf2all-setup.exe]

常见修改的代码   [code.txt]

NSIS基础教程CHM版   [NSIS安装制作基础教程(CHM格式)-特别感谢tracky]

感谢chenmy老大提供空间:)

temp 2005-01-20 16:16
QUOTE(tracky @ 2005年01月20日 01时57分)
没有WORD 你打包的看不了  5555

自己用打包了一个CHM版本

需要的就下吧

点击下载

请问tracky
你用的什么软件作的这个chm格式文件?很不错
能否告知?

tracky 2005-01-20 17:06
QUOTE(temp @ 2005年01月20日 16时16分)
请问tracky
你用的什么软件作的这个chm格式文件?很不错
能否告知?

网文快捕+QuickCHM

tracky 2005-01-20 17:09
QUOTE(chenmy @ 2005年01月20日 14时59分)
初学者推荐使用 NIS EDIT 的向导模式,不过向导模式无法实现复杂的组件设置。现在我一般都是在 NIS EDIT 中,手工编辑。

NIS EDIT不错
我昨天用了好久
后来发现Venis好像更好用 它的Function好用 再结合中文帮助 实在是爽

raindy 2005-01-20 17:14
上面的源NSIS脚本无法下载,特此附上:)

强烈建议结合动画演示及源代码实践一下


后缀名为 .NSI 的文件不能下载,改后缀名为 .txt 后正常!

蓝色网际 2005-01-20 20:30
NIS EDIT 对初学者来说不错,不过用久了之后发现还是 Venis 最顺手,不可可惜对中文支持差一点。
而 NIS EDIT 制作的 InstallOptions 自定义页面最方便。

raindy 2005-01-20 20:36
To 蓝MM:

可否提供渐隐效果的闪屏NSIS脚本代码?

还有背景音乐的:)

谢谢!!

dujuan509 2005-01-20 22:19
渐现渐隐的代码:
CODE

Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend


背景音乐(贯穿安装全过程):
CODE

Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call 'msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0'
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call 'user32.dll::ShowWindow(i r0, i 0)'
StrCpy $hmci $0
Functionend

Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend


背景音乐2:
CODE

Section/Function
SetOutPath $PLUGINSDIR
File $WINDIR\MEDIA\chimes.wav
BgImage::Sound /NOUNLOAD /WAIT "$PLUGINSDIR\chimes.wav"
BgImage::Clear /NOUNLOAD
Sectionend/Functionend

最后一种方法使用了 bgimage 插件,安装程序执行到该插件时会等待 wav 播放完再继续执行。

raindy 2005-01-20 22:49
谢谢dujuan509兄
如果闪屏效果[渐隐]+背景音乐[全程]放在一起
那代码该如何修改?
偶两者无法兼得
望不吝赐教

dujuan509 2005-01-20 22:59
CODE
outfile test.exe
Var hmci

Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call 'msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0'
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call 'user32.dll::ShowWindow(i r0, i 0)'
StrCpy $hmci $0

File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash

Functionend

Section
;add your codes
sleep 5000
SendMessage $hmci 0x0010 0 0
Sectionend

raindy 2005-01-20 23:10
谢谢dujuan509兄
已经学会了:)
可惜背景音乐只能支持MP3格式
如果能支持midi等就好了

蓝色网际 2005-01-21 09:48
MIDI 请参考这个 DEMO

raindy 2005-01-21 09:57
QUOTE(蓝色网际 @ 2005年01月21日 09时48分)
MIDI 请参考这个 DEMO

太感谢啦:)
:233 :233

如果蓝MM能大致解释一下MP3和MIDI代码的区别就好呢:)
好像都是调用 msvfw32.dll、'user32.dll 文件

蓝色网际 2005-01-21 20:26
推荐一个 NSIS 的快速编辑器 - NotePad2。虽然不是 NSIS 专门编辑器不过有时候比 Venis 方便,因为 Venis 不支持文本块操作,而且 Venis 对语法高亮做得不是很好。NotePad2 的语法高亮是根据后缀名来确定的,只要你打开 NSI 文件不用任何设置就会自动语法高亮。
其实 NotePad2 作为记事本替代者也非常不过,界面非常相似,而 NotePad2 功能强大了好多。
你可以在 http://foobar.nease.net/nsis/np2.exe 下载我修改的版本,主要补全了 NSIS 语法高亮,原版由于很久没更新 NSIS 的语法高亮代码,所以有一些新增的 NSIS 指令不能高亮显示。
并作了一些优化,做要是让它更像记事本

贴个图:

zkdpower 2005-01-25 23:08
我想问一下各位,如何把安装页面中的“Setup将安装……”中的Setup改成别的字

蓝色网际 2005-01-26 09:03
用 NSIS 2.03 的吧,那个版本简体语言符合我们的习惯。

JunJun 2005-01-26 09:49
QUOTE(蓝色网际 @ 2005年01月26日 09时03分)
用 NSIS 2.03 的吧,那个版本简体语言符合我们的习惯。

请教蓝前辈~
NSIS的闪屏图片的格式支持几种格式?
只支持位图吗?可以支持其他图片格式吗?

dujuan509 2005-01-26 11:49
QUOTE(zkdpower @ 2005年01月25日 23时08分)
我想问一下各位,如何把安装页面中的“Setup将安装……”中的Setup改成别的字

你指的是选择安装目录页面的提示文字吧?

只需在
CODE
!insertmacro MUI_PAGE_DIRECTORY

前面添加一行:
CODE
 !define MUI_DIRECTORYPAGE_TEXT_TOP "你需要的文字"

蓝色网际 2005-01-26 12:24
QUOTE(zjj1988101 @ 2005年01月26日 09时49分)
QUOTE(蓝色网际 @ 2005年01月26日 09时03分)
用 NSIS 2.03 的吧,那个版本简体语言符合我们的习惯。

请教蓝前辈~
NSIS的闪屏图片的格式支持几种格式?
只支持位图吗?可以支持其他图片格式吗?

这个插件支持 JPG、GIF

蓝色网际 2005-01-26 19:09
raindy 有时间的话看看我这个汉化补丁的 NSIS 脚本,然后写一篇教程,嘿嘿,写东西你比较拿手

基本上包括了做补丁包含的大部分情况:
自动查询原版软件安装目录并包含目录修正
原版软件的备份和恢复,以及汉化补丁的卸载
对原版进行 MD5 校验
把汉化补丁应用到原版软件不同版本
注册表的修正,主要是右键菜单
数据库的汉化
读取、修改、写入注册表二进制类型数据


NSIS 做补丁的优点是生成文件比较小,而且还可以包含 N 个版本的补丁

水木鱼 2005-01-27 17:10
请问题头的图标是怎么加的

水木鱼 2005-01-27 17:25
还有,欢迎页背景怎样才能设置成白色

我是在WIN98下使用的

图像

zkdpower 2005-01-27 17:26
请问各位如何改这些
第一个就是如何把插入的headerimage图片放到右边(默认是在左边)
第二个就是把headerimage上面的字改掉
谢谢

raindy 2005-01-27 17:39
QUOTE(水木鱼 @ 2005年01月27日 17时10分)
请问题头的图标是怎么加的

设置了自定义安装图标就会自动显示的,不需要另外添加,自定义安装图标:

CODE
!define MUI_ICON "G:\Temp\Nsisres\PDFsetup.ico"


这一点和INNO不同,INNO中则需要在[setup]中设置:

CODE
WizardSmallImageFile=G:\软件测试\尝试汉化\安装包\PDF2all\sm.bmp


其他需要个性化的地方,建议阅读一下蓝色网际翻译的NSIS帮助文档

dujuan509 2005-01-27 17:59
QUOTE(zkdpower @ 2005年01月27日 17时26分)
    请问各位如何改这些
第一个就是如何把插入的headerimage图片放到右边(默认是在左边)
第二个就是把headerimage上面的字改掉
谢谢

1、在脚本开头增加一行:
CODE
!define MUI_HEADERIMAGE

2、在   !insertmacro MUI_PAGE_LICENSE "c:\License.txt"前增加两行:
CODE
!define MUI_PAGE_HEADER_TEXT 111
!define MUI_PAGE_HEADER_SUBTEXT 222

蓝色网际 2005-01-27 18:30
QUOTE(zkdpower @ 2005年01月27日 17时26分)
    请问各位如何改这些
第一个就是如何把插入的headerimage图片放到右边(默认是在左边)
第二个就是把headerimage上面的字改掉
谢谢

你还是先看看 MUI 文档吧,界面的设置都作了说明
http://foobar.nease.net/nsis/mui/index.html

zkdpower 2005-01-27 21:06
请问蓝色网际,在你的MUI 文档中有
“MUI_HEADERIMAGE_RIGHT
令本应显示于左边的页眉图像显示于右面(当使用 RTL 语言时, 它将会显示于左边而不显示于右边).”
这么一段话,请问何为RTL语言呢,本人愚拙,望指点

蓝色网际 2005-01-27 21:10
RTL 就是 Right to Left,从右到左书写的语言,大概像阿拉伯这样的语言吧。

colonel 2005-01-30 17:07
请问下面那些问题怎样做的,
1、怎样控制自定义面的“下一步”按钮的可用与不可用
2、怎样为自定义页面上的组件添加Change事件呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本

蓝色网际 2005-01-30 18:35
对于控制下一步按钮来说,有三个阶段分别是:页面初始化之前、页面初始化时、页面要关闭时。不同的阶段对应的插入函数不同。

比如要在页面初始化之前禁止下一步按钮,MUI 界面可以这样

     !define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre
     !insertmacro MUI_PAGE_COMPONENTS

Function ComponentPre
GetDlgItem $0 $HWNDPARENT 1
     EnableWindow $0 0
FunctionEnd

colonel 2005-01-30 18:59
那“2、怎样为自定义页面上的组件添加Change事件呢”,我自定义了一个配置页面,我想用户在完成配置才可激活“下一步”按钮,这个怎么做的呢

蓝色网际 2005-01-30 21:57
需要给控件加上 NOTIFY 的标记。
例子在我的签名里有。

需要先了解 GetDlgItem 和 EnableWindow 指令的作用。

colonel 2005-01-30 23:18
这个问题呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本

蓝色网际 2005-01-31 09:08
QUOTE(colonel @ 2005年01月30日 23时18分)
这个问题呢
3、我在这个网站里下载的foobar汉化增强版的安装文件里看到页面“MUI_PAGE_COMPONENTS”是怎么做到的,就是怎么把那个页面的左边改为能显示描述内容和隐蔽一些文本

这个用 Resource Hacker 调整一下控件就行了。默认的 UI 文件是 NSIS\Contrib\UIs\modern.exe

colonel 2005-01-31 09:38
蓝色MM这个问题呢
怎样使“MUI_PAGE_COMPONENTS”中的树目录只能在点选复选框图标才被选中呢

是在这个函数“.onSelChange”里加代码吗?我看过你的“acdc31sr1.nsi”代码还是看不明白

蓝色网际 2005-01-31 10:55
到我的签名里下一个特别版的 makensis.exe。

colonel 2005-01-31 12:09
我不想在组件选择页面中用 onMouseOverSection 来显示 描述 ,如果架设函数可以增加的话,我就想到这个 “回调 onMouseDownSection ”

我是想通过组件目录里的 OnChange 事件来显示


我不懂VC++吖,如果我会的话就可以像MM你那样去改它的代码了 :039

蓝色网际 2005-01-31 12:20
特别版的就是这样啊,当你点击组件的时候描述区域才会显示或改变。
普通版的只要鼠标移上去就显示了。你没试过吗。

colonel 2005-01-31 12:30
哦~~~~~~~试到了,原来你是改了onMouseOverSection 回调,对啦,MM你有没有做过 组件的OnChange 事件吗?主要是用在自定义页面上的

是用这个吗?Call shell32.dll::SHChangeNotify

蓝色网际 2005-01-31 13:21
QUOTE(colonel @ 2005年01月31日 12时30分)
哦~~~~~~~试到了,原来你是改了onMouseOverSection 回调,对啦,MM你有没有做过 组件的OnChange 事件吗?主要是用在自定义页面上的

是用这个吗?Call shell32.dll::SHChangeNotify

不知道你说的“组件的 OnChange 事件”是什么意思。
是不是当组件选择更改的时候调用的函数呢?如果是的话那直接使用 Function .onSelChange 就行了。

wq99 2005-02-01 15:04
各位好:我是新手,
我在看function时,没发现参数的传入。
可能我的思维方式不对。
function Fname
functionend
参数应该怎么传呢?


查看完整版本: [-- 【原创】NSIS安装制作基础教程[初级篇] + NSIS 简体 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.014304 second(s),query:3 Gzip disabled