• NSIS 浅析(结合soui2制作安装包)


    脚本文件的默认扩展名是 .nsi ,头文件为 .nsh 。

    #注释方式
    ;注释方式
    /*注释方式*/


    !Addplugindir "dir" #增加当前目录下插件的位置
    !include Sections.nsh #引入文件


    定义常量:!define PI 3.14

    Var BLA ;声明变量
    !echo "hello world"


    ${PI} #引用常量


    StrCmp $RegistryLanguage "Chinese" Chinese English

    如果 if(RegistryLanguage=="Chinese")
    跳转Chinese
    else
    跳转English


    !macro add a b c ;一个实现(a+b)*(a-b)的宏
    IntOp $R0 ${a} - ${b} ;R0=a-b
    IntOp $R1 ${a} + ${b} ;R1=a+b
    IntOp ${c} $R0 * $R1 ;c = R0 * R1
    !macroend

    !insertmacro的参数会代入!macro里面使用


    Push Pop使用方法,伪代码:
    $0 = 'hello world'
    ·····一系列操作
    Push $0 ;开始使用$0这个变量要改变它的值
    StrCpy $0 10086 ;如果不使用Pop $0 那么$0 本来的值hello world会丢失找不回来
    ·····一系列操作
    Pop $0 ;还原$0的值为hello world

    IntCmp用法:
    IntCmp $0 5 is5 lessthan5 morethan5
    is5: ;$0 == 5
    DetailPrint "$$0 == 5"
    Goto done
    lessthan5: ;$0 < 5
    DetailPrint "$$0 < 5"
    Goto done
    morethan5: ;$0 > 5
    DetailPrint "$$0 > 5"
    Goto done
    done:


    IntCmp $R0 0 Done ;有点类似goto用法
    ·····一系列操作
    Done:
    一系列操作

    读取注册表:
    ReadRegStr $RegistrySdPath HKCU "Software\Idemera" "programpath"

    在NSIS2.42之前,如果想插件在调用之后不被FreeLibrary,必须使用/NOUNLOAD参数 或SetPluginUnload alwaysoff

    File 描述符用法:
    [/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
    将要提取的文件添加到当前输出路径 ($OUTDIR)。

    请注意,输出文件名为 $OUTDIR\filename_portion_of_file。
    使用 /oname=X 开关更改输出名称。X 可能包含变量,可以是完全限定路径或相对路径,在这种情况下,它将附加到由 SetOutPath设置的$ OUTDIR。
    使用此开关时,只能指定一个文件。如果输出名称包含空格,请引用整个参数,包括 /oname,如下例所示。
    支持通配符。
    如果使用 /r 开关,则在子目录中递归搜索匹配的文件和目录。如果只指定了一个路径段(例如 File /r something),
    则将递归搜索当前目录。如果指定了多个段(例如 File /r something\*.*),则最后一个路径段将用作匹配条件,其余路径段将用于目录递归搜索。如果目录名称匹配,则递归添加其所有内容。目录结构被保留。
    使用 /x 开关排除文件或目录。
    如果使用 /a 开关,添加的文件的属性将被保留。
    如果覆盖模式设置为“尝试”且无法覆盖文件,或者如果覆盖模式设置为“开启”且无法覆盖文件且用户选择忽略,则 File 命令设置错误标志。
    如果使用 /nonfatal 开关但没有找到文件,则会发出警告而不是错误。

    File something.exe
    File /a something.exe
    File *.exe
    File /r *.dat
    File /r data
    File /oname=temp.dat somefile.ext
    File /oname=$TEMP\temp.dat somefile.ext
    File "/oname=$TEMP\name with spaces.dat" somefile.ext
    File /nonfatal "a file that might not exist"
    File /r /x CVS myproject\*.*
    File /r /x *.res /x *.obj /x *.pch source\*.*

    WriteUninstaller [Path\]exename.exe ;将卸载程序写入指定的位置


    BgWorker::CallAndWait调用简单的Sleep函数

    ###########################################################################################################
    SOUI2+NSIS
    参考soui2官方给的例子依赖文件如下:
    api.h
    event.h
    pluginapi.c #注意单独去除这个文件的预编译头使用
    pluginapi.h
    Utils.h


    ###########################################################################################################

  • 相关阅读:
    [转]手工实现RTTI
    小楫轻舟
    百年孤独
    The power of now
    [转帖]Android平台下OpenGL初步
    设计模式六大原则(5):迪米特法则
    设计模式六大原则(4):接口隔离原则
    设计模式六大原则(3):依赖倒置原则
    设计模式六大原则(1):单一职责原则
    设计模式六大原则(2):里氏替换原则
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/15933139.html
Copyright © 2020-2023  润新知