NSIS学习笔记

MessageBox MB_OK '$$0 is "$0"' ;$0是某个值
${If} $0 == 'some value'
  MessageBox MB_OK '$$0 is some value'
${ElseIf} $0 == 'some other value'
  MessageBox MB_OK '$$0 is some other value'
${Else}
  MessageBox MB_OK '$$0 is "$0"'
${EndIf}
logiclib 就是使用${IF} 语句 ${while}循环

IntOp
用户变量输出

outfile "xunh.exe"

!include "logiclib.nsh"

section
StrCpy $R1 0
${While} $R1 < 5
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${EndWhile}

sectionend

page license ;许可协议页面
page components;安装的组件
page directory ;安装的目录
page instfiles ;选择的组件
uninstpage uninstconfirm ;卸载确认页面
uninstpage instfiles ;卸载

使用在段里的指令和安装程序属性指令不一样,他们在用户电脑运行环境里执行。这些指令可以解压文件读取和写入注册表、INI文件或普通文件,创建目录,创建快捷方式和更多功能。你可以在 指令 找到更多。

更多的基本用法说明 SetOutPath 告诉安装程序要把文件输出到哪里,和要解压哪些 文件。

回调函数就相当与一个调用函数,在安装程序一开始就调用而已

除了区段里的代码,还有一些在回调函数里的代码也会被执行,而且可能会在区段之前就执行了。比如 .onInit 回调函数就最先被执行,或者在页面显示过程中执行某些 页面回调函数。


outfile "xunh.exe"

!include "logiclib.nsh"

section
StrCpy $R1 0
${While} $R1 < 5
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${EndWhile}

sectionend
Function .onInit
  MessageBox MB_YESNO "即将安装我的程序,要继续吗?" IDYES gogogo
    Abort
  gogogo:
FunctionEnd

条件判断或执行代码循环可以使用 StrCmp, IntCmp, IfErrors, Goto 和其它来实现

使用MessageBoxes 或 DetailPrint 来显示变量内容,对所有变量使用 DumpState 插件来勾画总体大纲。


定义符号可以通过 !define 定义或使用 /D 命令行切换。这些定义符号可以用于条件编译
(通过 !ifdef 定义)或用于符号替换(一种格式简单的宏)。若要用它的值替换一个符号,
请使用 ${符号} (如果没有定义符号,那么不会产生转换)。这个转换为 first-come-first-served,


一个插件的调用像这样:

DLL名::函数名 "参数1" "参数2" "参数3"

InstallOptions 是一个受欢迎的插件,它允许你建立自定义的的页面,并与 NSIS 页面命令结合(看 页面)。 开始菜单插件 提供了一个可允许用户选择一个开始菜单目录的页面。这里还有许多不同用途的大量插件,查看 Docs 目录 里的帮助文件和例子。你也可以在线查找另外的插件: NSIS 维客.

引号的作用是是可以包含‘”他们可以是单引号、双引号或向后的单引号。

$INSTDIR 安装目录
$OUTDIR当前输出路径
$CMDLINE安装程序的命令行输入。
$LANGUAGE


下面这些都是常量


当前使用的语言标识符
$DESKTOP

Windows 桌面目录(通常为 C:\Windows\Desktop 但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$EXEDIR

安装程序运行时的位置。(从技术上来说你可以修改此变量,但并不是一个好方法)。

$EXEFILE

安装程序的名称。

$EXEPATH

安装程序运行时的完整路径。

${NSISDIR}

包含 NSIS 安装目录的符号定义标记。常用于在你想调用在 NSIS 目录下的资源时,例如:图标、界面……

$SYSDIR

Windows 系统目录(通常为 C:\Windows\System 或 C:\WinNT\System32 但在运行时会检测)。

$STARTMENU

开始菜单目录(常用于添加一个开始菜单项,使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$SMPROGRAMS

开始菜单程序目录(当你想定位 $STARTMENU\程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$SMSTARTUP

开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。

$ \r \n \t
要显示

必须使用下面的这个
$

转义,用来表示 $。

$\r

用来表示一个回车(\r)。

$\n

用来表示新的一行(\n)。

$\t

用来表示一个 Tab(\t)。


在引号里面加入 "${sec2_id} 的名称:$\n$0"  $\n 表示新的一行,且不显示,去掉$将显示

每个内建的页面都有三个回调函数。一个预置函数、一个显示创建函数和一个离开函数

一个自定义的页面仅有两个回调函数,一个是必须的创建页面,另一个离开函数的作用就和内建页面的离开函数一样。

 Page
custom [创建函数] [离开函数] [标题] [/ENABLECANCEL]
  或
内置的页面类型 [预置函数] [显示函数] [离开函数] [/ENABLECANCEL]
要添加一个安装程序页面,请看上面关于相对于自定义页面的内建页面和关于回调函数的段。

内置的页面类型 :

license - 许可协议页面
components - 组件选择页面
directory - 安装目录选择页面
instfiles - 安装执行页面
uninstConfirm - 卸载确认页面

" "引号好像在NSIS里面没有用


 StrCpy $0 1
   MessageBox MB_OK '$0'  就显示1

 StrCpy $0 1
   MessageBox MB_OK '$0 is $0 ' 1 is 1

学会了调试

看到了

一般函数名以 . 开头的(例如 ".Whatever")作为回调函数保留

也就是说:以.开头的是回调函数

SendMessage
窗口句柄 消息 第一个消息参数 第二个消息参数 [用户变量(返回值)] [/TIMEOUT=毫秒]

AddBrandingImage
(left|right|top|bottom) (宽|高)
AddBrandingImage left 0
AddBrandingImage right 50
AddBrandingImage top 20
AddBrandingImage bottom 35
AddBrandingImage left 100 5

安装程序界面 ,默认为0

 页面选项

下面的这个列表列出了某个页面类型受什么样的命令影响。除非特别提及,否则这些命令都可以在 PageEx 区块内外使用。如果在一个 PageEx 区块内部使用那么他们仅仅对由 PageEx 设置的当前页面产生影响,否则他们将被设为其他所有页面的默认值。

许可页面

LicenseText
LicenseData
LicenseForceSelection
组件选择页面

ComponentText
目录选择页面

DirText
DirVar - 仅能在 PageEx 里使用。
DirVerify
卸载、安装记录页面

DetailsButtonText
CompletedText
卸载确认页面

DirVar - 仅能在 PageEx 里使用。
UninstallText
要设置页面标题请使用 Caption。

Icon
[路径\]图标文件.ico
设置安装程序的图标。在图标文件里的每一个图标将会被包含在安装程序里

icon 功能强大,输出的EXE文件图标和安装时用的图标都是它

例如它:icon f:\tub\LD.ico


$INSTDIR
安装目录
是安装变量

$PROGRAMFILES是安装常量

$language 是变量,英语是1033
                  繁体中文是1028
                  简体中文是2052

WriteRegStr是写入注册表

解决了注册表的问题
 WriteRegStr HKLM   software\loadmaster version "4.0"
 writeregstr HKLM   software\loadmaster path "$INSTDIR"

$instdir 是变量,路径,解决。


呵呵,又测试成功
InstallDir $programfiles\Loadmaster1
InstallDirRegKey HKLM Software\loadmaster path

InstallDirRegKey 的作用是检测以前的安装路径

 LoadLanguageFile
语言文件.nlf
载入语言文件

loadlanguagefile "D:\Program Files\NSIS\Contrib\Language files\SimpChinese.nlf"
;loadlanguagefile  "D:\Program Files\NSIS\Contrib\Language files\English.nlf"

如果用;loadlanguagefile SimpChinese.nlf
loadlanguagefile  English.nlf
不知道缺少了哪个头文件     

$LANGUAGE

当前使用的语言标识符,是一个变量。

使用loadlanguagefile对于的语言 ID将会被定义(例如: ${LANG_ENGLISH} 将会被定义为 1033)。

检测语言,然后显示许可 功能已经完成
LicenseLangString ln ${LANG_SIMPCHINESE} f:\cnlicence.txt
LicenseLangString ln ${LANG_ENGLISH} f:\enlicence.txt
LicenseLangString license ${LANG_TRADCHINESE} f:\tnlicence.txt
LicenseData $(ln)

 Pop
用户变量(输出)
从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的,则会置一个错误标记。

Push 1
Push 2
Exch
Pop $0 # = 1

弹出 1赋值给变量 $0

学会了SWITCH 语句


outfile "switch.exe"
!include "LogicLib.nsh"
page instfiles

section
StrCpy $0 "2"
${switch}  $0
${Case} 1
SetOutPath "$programfiles"
file "f:\tub\pic.bmp"

 ${Break}


${Case}  2
SetOutPath "$programfiles"
file "f:\tub\pic2.bmp"
 ${Break}

${EndSwitch}


sectionend


       

 

原文地址:https://www.cnblogs.com/bluewelkin/p/1301488.html