zoukankan      html  css  js  c++  java
  • 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


           

     

  • 相关阅读:
    SQL学习笔记六之MySQL数据备份和pymysql模块
    SQL学习笔记五之MySQL索引原理与慢查询优化
    SQL学习笔记四之MySQL数据操作
    SQL学习笔记四(补充-2)之MySQL多表查询
    SQL学习笔记四(补充-2-1)之MySQL SQL查询作业答案
    SQL学习笔记四(补充-1)之MySQL单表查询
    SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序
    Python Web学习笔记之为什么设计GIL
    SQL学习笔记三之MySQL表操作
    buffer小解
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/1301488.html
Copyright © 2011-2022 走看看