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],如需转载请直接联系原始作者,并请注明原始出处。