NSIS学习笔记转.docx

上传人:b****1 文档编号:15074484 上传时间:2023-06-30 格式:DOCX 页数:16 大小:22.82KB
下载 相关 举报
NSIS学习笔记转.docx_第1页
第1页 / 共16页
NSIS学习笔记转.docx_第2页
第2页 / 共16页
NSIS学习笔记转.docx_第3页
第3页 / 共16页
NSIS学习笔记转.docx_第4页
第4页 / 共16页
NSIS学习笔记转.docx_第5页
第5页 / 共16页
NSIS学习笔记转.docx_第6页
第6页 / 共16页
NSIS学习笔记转.docx_第7页
第7页 / 共16页
NSIS学习笔记转.docx_第8页
第8页 / 共16页
NSIS学习笔记转.docx_第9页
第9页 / 共16页
NSIS学习笔记转.docx_第10页
第10页 / 共16页
NSIS学习笔记转.docx_第11页
第11页 / 共16页
NSIS学习笔记转.docx_第12页
第12页 / 共16页
NSIS学习笔记转.docx_第13页
第13页 / 共16页
NSIS学习笔记转.docx_第14页
第14页 / 共16页
NSIS学习笔记转.docx_第15页
第15页 / 共16页
NSIS学习笔记转.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

NSIS学习笔记转.docx

《NSIS学习笔记转.docx》由会员分享,可在线阅读,更多相关《NSIS学习笔记转.docx(16页珍藏版)》请在冰点文库上搜索。

NSIS学习笔记转.docx

NSIS学习笔记转

MessageBoxMB_OK'$$0is"$0"';$0是某个值

${If}$0=='somevalue'

 MessageBoxMB_OK'$$0issomevalue'

${ElseIf}$0=='someothervalue'

 MessageBoxMB_OK'$$0issomeothervalue'

${Else}

 MessageBoxMB_OK'$$0is"$0"'

${EndIf}

logiclib就是使用${IF}语句${while}循环

IntOp

用户变量输出

outfile"xunh.exe"

!

include"logiclib.nsh"

section

StrCpy$R10

${While}$R1<5

 IntOp$R1$R1+1

 DetailPrint$R1

${EndWhile}

sectionend

pagelicense;许可协议页面

pagecomponents;安装的组件

pagedirectory;安装的目录

pageinstfiles;选择的组件

uninstpageuninstconfirm;卸载确认页面

uninstpageinstfiles;卸载

使用在段里的指令和安装程序属性指令不一样,他们在用户电脑运行环境里执行。

这些指令可以解压文件读取和写入注册表、INI文件或普通文件,创建目录,创建快捷方式和更多功能。

你可以在指令找到更多。

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

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

除了区段里的代码,还有一些在回调函数里的代码也会被执行,而且可能会在区段之前就执行了。

比如.onInit回调函数就最先被执行,或者在页面显示过程中执行某些页面回调函数。

outfile"xunh.exe"

!

include"logiclib.nsh"

section

StrCpy$R10

${While}$R1<5

 IntOp$R1$R1+1

 DetailPrint$R1

${EndWhile}

sectionend

.onInit

 MessageBoxMB_YESNO"即将安装我的程序,要继续吗?

"IDYESgogogo

   Abort

 gogogo:

End

条件判断或执行代码循环可以使用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$01

  MessageBoxMB_OK'$0' 就显示1

 StrCpy$01

  MessageBoxMB_OK'$0is$0'1is1

学会了调试

看到了

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

也就是说:

以.开头的是回调函数

SendMessage

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

AddBrandingImage

(left|right|top|bottom)(宽|高)

AddBrandingImageleft0

AddBrandingImageright50

AddBrandingImagetop20

AddBrandingImagebottom35

AddBrandingImageleft1005

安装程序界面,默认为0

 页面选项

下面的这个列表列出了某个页面类型受什么样的命令影响。

除非特别提及,否则这些命令都可以在PageEx区块内外使用。

如果在一个PageEx区块内部使用那么他们仅仅对由PageEx设置的当前页面产生影响,否则他们将被设为其他所有页面的默认值。

许可页面

LicenseText

LicenseData

LicenseForceSelection

组件选择页面

ComponentText

目录选择页面

DirText

DirVar-仅能在PageEx里使用。

DirVerify

卸载、安装记录页面

DetailsButtonText

CompletedText

卸载确认页面

DirVar-仅能在PageEx里使用。

UninstallText

要设置页面标题请使用Caption。

Icon

[路径\]图标文件.ico

设置安装程序的图标。

在图标文件里的每一个图标将会被包含在安装程序里

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

例如它:

iconf:

\tub\LD.ico

$INSTDIR

安装目录

是安装变量

$PROGRAMFILES是安装常量

$language是变量,英语是1033

                 繁体中文是1028

                 简体中文是2052

WriteRegStr是写入注册表

解决了注册表的问题

 WriteRegStrHKLM  software\loadmasterversion"4.0"

 writeregstrHKLM  software\loadmasterpath"$INSTDIR"

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

呵呵,又测试成功

InstallDir$programfiles\Loadmaster1

InstallDirRegKeyHKLMSoftware\loadmasterpath

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

 LoadLanguageFile

语言文件.nlf

载入语言文件

loadlanguagefile"D:

\ProgramFiles\NSIS\Contrib\Languagefiles\SimpChinese.nlf"

;loadlanguagefile "D:

\ProgramFiles\NSIS\Contrib\Languagefiles\English.nlf"

如果用;loadlanguagefileSimpChinese.nlf

loadlanguagefile English.nlf

不知道缺少了哪个头文件     

$LANGUAGE

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

使用loadlanguagefile对于的语言ID将会被定义(例如:

${LANG_ENGLISH}将会被定义为1033)。

检测语言,然后显示许可功能已经完成

LicenseLangStringln${LANG_SIMPCHINESE}f:

\cnlicence.txt

LicenseLangStringln${LANG_ENGLISH}f:

\enlicence.txt

LicenseLangStringlicense${LANG_TRADCHINESE}f:

\tnlicence.txt

LicenseData$(ln)

 Pop

用户变量(输出)

从堆栈里弹出一个字串到用户变量$x。

如果堆栈是空的,则会置一个错误标记。

Push1

Push2

Exch

Pop$0#=1

弹出1赋值给变量$0

学会了SWITCH语句

outfile"switch.exe"

!

include"LogicLib.nsh"

pageinstfiles

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}

问:

如何运行一个安装文件.reg

答:

注:

your.reg为文件名

ExecWait"regedit.exe/syour.reg"

问:

如何运行一个安装文件.inf

答:

注:

skins.inf为文件名

ExecWait"RunDll32advpack.dll,LaunchINFSectionskins.inf,DefaultInstall"

问:

如何运行一个安装文件.msi

答:

注:

soapsdk.msi为文件名

Execwait`msiexec/qn/i"soapsdk.msi"`

问:

关联文件图标后,图标没变化。

答:

刷新图标

'System:

:

Callshell32.dll:

:

SHChangeNotify(l,l,i,i)v(0x08000000,0,0,0)'

问:

安装窗体变窄了。

答:

SetFont/LANG=2052"tahoma"8

原问题见帖子

问:

如何运行一个批处理文件.bat

答:

注:

your.bat为文件名

ExecWait"your.bat"

不显示黑框框

nsExec:

:

Exec"your.bat"

sectionend

ReadRegDWORD

用户变量(输出)根键子键项

 ReadRegStr

用户变量(输出)根键子键项

WriteRegBin

根键子键项值数据

该命令将会写一个区块的二进制数据到注册表

 WriteRegStr

根键子键项值

把字串写入注册表

EnumRegKey

用户变量(输出)根键子键索引

 ReadRegStr 相得益彰呵呵,一个读变量名,一个读里面的内容

ReadRegStr

用户变量(输出)根键子键项

ClearErrors

清除错误位标记。

ExecShell"open""空了一格都运行错误

${NSD_CreateText}013u100%12u最后一个为高度

FindWindow

用户变量(窗口句柄输出)窗口类名[窗口标题][父窗口句柄][childafter]

 GetDlgItem

用户变量(输出)窗口句柄控件ID

Section-AdditionalIcons

${switch}$language

${Case}${LANG_ENGLISH}

; WriteIniStr"$INSTDIR\${PRODUCT_NAME}.url""InternetShortcut""URL""${PRODUCT_WEB_SITE}"

 CreateDirectory"$SMPROGRAMS\LoadMaster"

 CreateShortCut"$SMPROGRAMS\LoadMaster\Website.lnk""$INSTDIR\${PRODUCT_NAME}.url"

 CreateShortCut"$SMPROGRAMS\LoadMaster\Uninstall.lnk""$INSTDIR\uninst.exe"

 ${Break}

${Case}${SIMPCHINESE}

;WriteIniStr"$INSTDIR\${PRODUCT_NAME}.url""InternetShortcut""URL""${PRODUCT_WEB_SITE}"

 CreateDirectory"$SMPROGRAMS\装箱大师企业版"

 CreateShortCut"$SMPROGRAMS\装箱大师企业版\装箱大师官方网站.lnk""$INSTDIR\${PRODUCT_NAME}.url"

 CreateShortCut"$SMPROGRAMS\装箱大师企业版\装箱大师企业版卸载.lnk""$INSTDIR\uninst.exe"

 CreateShortCut"$SMPROGRAMS\装箱大师企业版\装箱大师企业版帮助文档.lnk""$INSTDIR\Manual.chm"

${Break}

${Case}1028

 CreateDirectory"$SMPROGRAMS\裝箱大師企業版"

 CreateShortCut"$SMPROGRAMS\裝箱大師企業版\裝箱大師官方網站.lnk""$INSTDIR\${PRODUCT_NAME}.url"

 CreateShortCut"$SMPROGRAMS\裝箱大師企業版\裝箱大師企業版卸載.lnk""$INSTDIR\uninst.exe"

 CreateShortCut"$SMPROGRAMS\裝箱大師企業版\裝箱大師企業版幫助文檔.lnk""$INSTDIR\Manual.chm"

${Break}

${EndSwitch}

SectionEnd

InstallDir$programfiles\LoadMaster

InstallDirRegKeyHKLMSoftware\loadmasterpath

检测安装程序以前的路径,如果有,则安装在以前的目录下

SectionIn如果指定RO作为一个参数,则该区段将被设为只读区段,

SetBrandingImage

[/IMGID=对话里的ID项][/RESIZETOFIT]位图.bmp

如果指定了/RESIZETOFIT则图像会自动改变尺寸到图像控件的大小。

PagelicenselicenseImage

licenseImage

PAGE还可以这样用

delete$SMPROGRAMS\LoadMaster

删除不了,下面的这个可以

RMDir"$SMPROGRAMS\LoadMaster"

SetAutoClosetrue自动关闭界面,

如自动关闭卸载界面

在sectionunistall

delete....

setautoclose

sentionend

/nounload的作用

当插件命令执行时NSIS将会解压所需的插件DLL文件到一个临时目录($PLUGINSDIR),把指定的参数全部压入(从右到左次序),然后执行DLL函数。

如果指定了/NOUNLOAD选项则插件将不会卸载直到安装程序退出或下一次你使用该插件并不带/NOUNLOAD参数。

需要注意的是最后一次调用该插件的时候必须不能有/NOUNLOAD否则插件将不能从$PLUGINSDIR里删除,而导致垃圾文件留在用户的机器里。

查看安装程序内部的语言在

D:

\ProgramFiles\NSIS\Contrib\Languagefiles\simpchinese.nsh文件夹

v2.0.1.0

怎样去掉V

其实把它当作一个字符串,从第一个往后赋给一个新的变量

StrCpy$R0$0""1

intop$8$r0-2

System:

:

Call"Kernel32:

:

GetSystemDefaultLangID(v..)i.s"

 Pop$3

检测系统语言,用到上面这个DLL。

system是DLL,CALL是函数

Push$0

  Push$1

  messageboxMB_OK"$language"

 System:

:

Call"mscoree:

:

GetCORVersion(w.r0,i${NSIS_MAX_STRLEN},*i)i.r1?

u"

${if}$language=2052

StrCmp$0""0+4

MessageboxMB_OK"安装程序检测到您计算机上没有安装.Network2.0,您必须先安装.Network2.0或以上版本,才能安装运行本软件!

"

ExecShell"open""

abort

${endif}

检测.net用到上面这个函数$0就是版本号,返回值

还可以用下面的方法,检测微软.net安装路径的注册表里面。

读取索引号,读取里面的值

在HKLM\software\microsoft\networksetup下面

WriteINIStr

INI文件区段项值

WriteIniStr"$INSTDIR\${PRODUCT_NAME}.url""InternetShortcut""URL""${PRODUCT_WEB_SITE}"

RMDir

[/r][/REBOOTOK]目录名

删除指定的目录(完整路径)。

没有/r参数时只有在目录为空时才会被删除

RMDir "$desktop\裝箱大師企業版4.0.lnk" 竟然删不掉

该为delete就可

我的理解是rmdir删除的是目录

          delete删除的是完整路径

RMDir/r "$INSTDIR\Media\*.*"

$instdir就是c:

\programs\loadmaster4.0

插入宏,有三种选择

1.在

D:

\ProgramFiles\NSIS\Contrib\ModernUI\system.nsh

2.!

include"MUI.nsh"其实就是上面这种选择

3.在

!

include"MUI2.nsh"

SMSTARTUP

开始菜单程序/启动目录。

该常量的内容(所有用户或当前用户)取决于SetShellVarContext设置。

默认为当前用户。

$QUICKLAUNCH

在IE4活动桌面及以上的快速启动目录。

如果快速启动不可用,仅仅返回和$TEMP一样。

!

ifdefFULL

   !

definePRODUCT_NAME`迅雷Ayu去广告版`

   !

defineEXEFN`迅雷_${PRODUCT_VERSION}_Full.exe`

!

else

   !

definePRODUCT_NAME`迅雷Ayu去广告精简版`

   !

defineEXEFN`迅雷_${PRODUCT_VERSION}_Lite.exe`

!

endif

${if}$1==""

DetailPrint'$(Associatedfiletypes)*.${ext}$(For)"${desc}"...'

WriteRegStrHKCR"Back.${Project}\.${ext}""""_Blank_"

${Else}

DetailPrint'$(Modifyfiletypes)*.${ext}$(For)"${desc}"...'

${EndIf}

If|Unless..{ElseIf|ElseUnless}..

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2