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帮助文档》。
 
 对于制作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如下

附图

2)闪屏界面

11.修改代码

1) 修改软件LOGO:在源代码“ MUI Settings”后面添加下列代码:

 

 
以下是代码片段:
!define MUI_WELCOMEFINISHPAGE_BITMAP "G:\temp\ pwr.bmp"
  注释:引号内为位图的路径,位图大小大约为165*298

  效果图如图14所示

附图

 
2)修改安装包标题,在同上位置添加下列代码:
 
 
以下是代码片段:
!define MUI_WELCOMEPAGE_TITLE "\r\n PDF2all 5.35d 汉化版"
  
  注释:\r\n为换行标志
  
  效果图上楼如图14所示

3)修改图11C中的说明,同上位置添加下列代码:

 
以下是代码片段:
!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中的修改,在源代码:
 
以下是代码片段:
ShowInstDetails show
ShowUnInstDetails show

后添加:

 
以下是代码片段:
BrandingText " 软件汉化:高芳銮 (Raindy)"

效果图如图15所示

附图

 
5)在完成添加“汉化说明”,只要在源代码:
 
以下是代码片段:
; Finish page
后添加:
 
以下是代码片段:
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\汉化说明.txt"
!define MUI_FINISHPAGE_SHOWREADME_TEXT "汉化说明"
效果所示

附图

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

splash::show 2300 $TEMP\spltmp

Pop $0

FunctionEnd

效果图如此软件下载:pdf2all-setup.rar
B、渐隐闪屏

 
以下是代码片段:
Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "G:\Temp\Nsisres\splash.bmp"
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend

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

 
以下是代码片段:
Var hmci
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "G:\Temp\Nsisres\music.mp3"             [说明:源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高手的中高级教程:)

相关资料下载[以Pdf2allV5.35d为例,可直接点击下载]

  全文的Word文档附在附件中
NSIS.rar

 
偶以Pdf2allV5.35d为例,
制作了安装包制作动画演示

[可直接点击下载]

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

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

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

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

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

感谢chenmy老大提供空间:)

偶的闪屏图:

附图

 

下面摘引一些论坛的讨论,原帖点击进入
 
渐现渐隐的代码:
 
以下是代码片段:
Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend

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

 
以下是代码片段:
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:

 
以下是代码片段:
Section/Function
SetOutPath $PLUGINSDIR
File $WINDIR\MEDIA\chimes.wav
BgImage::Sound /NOUNLOAD /WAIT "$PLUGINSDIR\chimes.wav"
BgImage::Clear /NOUNLOAD
Sectionend/Functionend
最后一种方法使用了 bgimage 插件,安装程序执行到该插件时会等待 wav 播放完再继续执行。
 

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

 
 
以下是代码片段:
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
谢谢dujuan509兄
已经学会了:)
可惜背景音乐只能支持MP3格式
如果能支持midi等就好了

蓝色网际
MIDI 请参考这个 DEMO

附件  
  midi.zip


蓝色网际

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

贴个图:

附图


dujuan509

引用 (zkdpower @ 2005年01月25日 23时08分)
我想问一下各位,如何把安装页面中的“Setup将安装……”中的Setup改成别的字
你指的是选择安装目录页面的提示文字吧?

只需在

 

 
以下是代码片段:
!insertmacro MUI_PAGE_DIRECTORY 
前面添加一行:

 

 

以下是代码片段:
!define MUI_DIRECTORYPAGE_TEXT_TOP "你需要的文字"

蓝色网际
 

引用 (zjj1988101 @ 2005年01月26日 09时49分)
引用 (蓝色网际 @ 2005年01月26日 09时03分)
用 NSIS 2.03 的吧,那个版本简体语言符合我们的习惯。
请教蓝前辈~
NSIS的闪屏图片的格式支持几种格式?
只支持位图吗?可以支持其他图片格式吗?
这个插件支持 JPG、GIF

附件   newadvsplash.zip

蓝色网际
 

raindy 有时间的话看看我这个汉化补丁的 NSIS 脚本,然后写一篇教程,嘿嘿,写东西你比较拿手

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

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

附件  
  hb-acdsee7_pub[1].nsi.zip


raindy

引用 (水木鱼 @ 2005年01月27日 17时10分)
请问题头的图标是怎么加的
设置了自定义安装图标就会自动显示的,不需要另外添加,自定义安装图标:

 

 
以下是代码片段:
!define MUI_ICON "G:\Temp\Nsisres\PDFsetup.ico"

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

 

 
以下是代码片段:
WizardSmallImageFile=G:\软件测试\尝试汉化\安装包\PDF2all\sm.bmp
其他需要个性化的地方,建议阅读一下蓝色网际翻译的NSIS帮助文档
 

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

附图

dujuan509
1、在脚本开头增加一行:

 
以下是代码片段:
!define MUI_HEADERIMAGE
2、在 !insertmacro MUI_PAGE_LICENSE "c:\License.txt"前增加两行:

 

 
以下是代码片段:
!define MUI_PAGE_HEADER_TEXT 111
!define MUI_PAGE_HEADER_SUBTEXT 222

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


zkdpower

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

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



restools

venis
function 向导功能在 NISEdit 上完整实现,晚上或明天放出,不过需要人帮忙把向导脚本编写完整,因为写程序时只是拿了4个具代表性的
function 来作为测试,这是这次放出版本实现的功能。要知道 NSIS 的 funciton 有这么多啊。

 

以下是代码片段:

; NSIS 函数向导文件
; 脚本解释
; Textbox(文本框) 如果不写入这项 Texbox 默认使用 参数1(不带引号)
; 0:(不显示) 1:(不带引号) 2:(带双引号) 3:(多行显示)
;
; Checkbox(允许参数按钮) 如果不写入这项 Texbox 默认使用 参数0(必填参数)
; 0:(必填参数) 1:(可选择) 2:(将来使用)
;
; Button(选择参数填充按钮) 如果不写入这项 Button 默认使用 参数0(选择参数)
; 0:(不显示) 1:(浏览选择文件) 2:(浏览选择目录) 3:(选择参数) 4:(选择排序后的参数) 5:(选择可复合参数)
; 6:(选择已排序的可复合参数) 7:(可选择目录或文件)
;
; 标记: %%LABELS%%    -- 用在 Goto 这类函数中的 标记 参数
;
; 函数: %%FUNCTIONS%% -- 用在 Call 这类函数中的调用 参数
;
; 以上两个常用变量是会自动检测 NSIS 脚本里面的已有标记和函数的
;
;例子:
;[Abort]      -- 函数名字
;Help=取消安装,停止执行脚本,并且在状态显示里显示用户信息。 -- 在函数向导对话框中旁边的简明帮助
;NumArgs=1      -- 函数共有几个参数
;Arg1=用户信息      -- 显示在参数顶上的提示语句
;Button1=0      -- 该按钮不显示
;Checkbox1=0      -- 该参数为必填项
;Textbox1=2      -- 该参数为带双引号的字符串
;
;
;如果是多行字符例如简明帮助,如果你要强行换行,请用英文的逗号,如果你必须要显示英文的逗号,请用双引号括起整个字符串。
;Help=""Cancels the install, stops execution of script, and displays user_message in the status display.""
;

[Abort]
Help=取消安装,停止执行脚本,并且在状态显示里显示用户信息。
NumArgs=1
Arg1=用户信息
Checkbox1=0
Button1=0
Textbox1=2

[BringToFront]
Help=使安装程序窗口可见并把它带到其他窗口的最前端。
NumArgs=0

[CreateShortCut]
Help=创建一个指向“目标文件”的快捷方式“快捷文件.lnk”,可以带“参数”参数。
NumArgs=8
Arg1=快捷文件.lnk
Checkbox1=0
Button1=0
Textbox1=2
Arg2=目标文件
Checkbox2=0
Button2=1
Textbox2=2
Arg3=参数
Checkbox3=1
Button3=0
Textbox3=2
Arg4=图标文件
Checkbox4=1
Button4=1
Textbox4=2
Arg5=图标索引号
Button5=0
Checkbox5=1
Textbox5=1
Arg6=启动选项
Button6=3
Checkbox6=1
Textbox6=1
Options6=SW_SHOWNORMAL,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED
Arg7=键盘快捷键
Button7=0
Checkbox7=1
Textbox7=2
Arg8=描述
Button8=0
Checkbox8=1
Textbox8=2

[Goto]
Help=如果指定了标记,则跳转到“要跳转的标记:”。
NumArgs=1
Arg1=要跳转的标记 | +偏移| -偏移| 用户变量(目标)
Textbox1=1
Checkbox1=0
Button1=3
Options1=%%LABELS%%

[Call]
Help=调用“函数名”函数。如果在 Uninstall 区段,Call 仅能调用以“un.”开头的函数名。
NumArgs=1
Arg1=函数名 | :标记名
Button1=3
Checkbox1=0
Textbox1=1
Options1=%%LABELS%%,%%FUNCTIONS%%

显示效果

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。有时间看看它是什么原理。

ISS2NSI_Src.rar

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
GetDlgItem $0 $HWNDPARENT 1 
EnableWindow $0 0
FunctionEnd 

colonel
那“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 。

责任编辑: 乾 .:|:. 标签(Tag): NSIS

·上一篇: 大家都来看看“高手”剽窃--7di.net ·下一篇: 把 NISEdit 变成最强的 NSIS 编辑器, 给点意见

· 版权申明: 本文引自《http://bbs.hanzify.org/index.php?showtopic=30029》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《http://bbs.hanzify.org/index.php?showtopic=30029》[ 作者: raindy],如需转载请直接联系原始作者,并请注明原始出处。

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

  1. .NET C#教程初级篇 1-1 基本数据类型及其存储方式

    .NET C# 教程初级篇 1-1 基本数据类型及其存储方式 全文目录 (博客园).NET Core Guide (Github).NET Core Guide 本节内容是对于C#基础类型的存储方式以 ...

  2. ant 安装及基础教程 !

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下   一.概述 ant 是一个将软件编译.测试.部署等步骤联系在 ...

  3. golang基础教程——字符串篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第6篇文章,这篇主要和大家聊聊golang当中的字符串的使用. 字符串定义 golang当中的字符串本质是只读的字符 ...

  4. Thrift教程初级篇——thrift安装环境变量配置第一个实例

    前言: 因为项目需要跨语言,c++客户端,web服务端,远程调用等需求,所以用到了RPC框架Thrift,刚开始有点虚,第一次接触RPC框架,后来没想到Thrift开发方便上手快,而且性能和稳定性也不 ...

  5. Maven教程初级篇02:pom.xml配置初步

    1. 创建项目并更改项目基本配置信息 在命令行下运行如下命令创建一个项目: 1 mvn archetype:create -DgroupId=net.jianxi.tutorials     2    ...

  6. Python基础—面向对象(初级篇)

    一.什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计),python语言比较灵活即支持面向对象编程也支持面向函数式编程. 面向过程编程 ...

  7. Termux 高级终端安装使用配置教程

    Termux 高级终端安装使用配置教程,这篇文章拖了有小半年.因为网上相关的文章相对来说还是比较少的,恰好今天又刷了机,所以就特意来总结一下,希望本文可以帮助到其他的小伙伴.发挥Android平台更大 ...

  8. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

      此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...

  9. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

随机推荐

  1. Oracle函数大全之转换函数

    chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SELECT ...

  2. 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。

    在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = ...

  3. spring bean初始化顺序

    转载:http://blog.csdn.net/heyutao007/article/details/50326793 常用的设定方式有以下三种:通过实现 InitializingBean/Dispo ...

  4. 表单_post提交方式和get的区别,元素集

    提交方式及表单域的name属性 使用form表单一种是post提交方式,一种是get提交方式,它们以method属性来定义,如果没有指定method属性,默认get方式提交. 表单域必须配合name属 ...

  5. java面向对象编程--第十一章 异常处理

    1.异常:描述出错信息的对象. 字节码校验时,如发生错误,则会抛出异常. 2.所有异常的父类是Exception,异常可以捕获,可以处理. 所有错误的父类是Error,错误可以捕获,但不能处理. Th ...

  6. [Js]封装好的通过className来获取元素的函数

    <div id="box"> <div class="star"></div> <div class="st ...

  7. L1 - 闭包和原型链

    先来一炮尝尝: var i = 10; function myFunc(){ var i = 20; function innerFunc(){ alert(i); } return innerFun ...

  8. java.util.ResourceBundle使用详解(转)

    java.util.ResourceBundle使用详解   一.认识国际化资源文件   这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以:          轻松地本地化或翻译成不同的 ...

  9. 基于Lumisoft.NET组件的POP3邮件接收和删除操作

    From: http://www.cnblogs.com/wuhuacong/archive/2013/05/06/3063093.html Lumisoft.NET组件是一个非常强大的邮件发送.邮件 ...

  10. eval函数的缺陷

    1.今天在维护产品目录的时候,发现了个奇葩的事情,eval函数转换出错,查验之后发现字符串中如果加入了换行符就会导致该问题. 2.测试程序 info.file [{productDirIds:'1', ...