热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NISI安装包

目录简介  工具:脚本结构  属性  页面  区段  函数基本语法  变量  编译器指令参考简介NSIS(NullsoftScriptableInst

目录

简介
  工具:
脚本结构
  属性
  页面
  区段
  函数
基本语法
  变量
  编译器指令
参考



简介

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS 是通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS 的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。


工具:

HW VNISEdit(NSIS脚本编辑器)

1、 使用编辑器中NSIS脚本向导功能,自动生成对应的nsi脚本。

点击文件->新建脚本:向导,接下来根据向导页面的设置选项一步步设置你需要的安装条件。

 

2、也可以在编辑器中编写nsi脚本,然后再编译生成exe安装包文件。

 


脚本结构

NSIS脚本(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。

 


属性

用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。

 


页面

安装程序的向导页面

例:


Page license

Page components

Page directory

Page instfiles

UninstPage uninstConfirm

UninstPage instfiles

 


区段

是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。卸载程序的区段名用"un."作为前缀。

例:


Section "Installer Section"

SectionEnd

 

Section "un.Uninstaller Section"

SectionEnd

 

区段名的修饰符/o表示该区段默认不选上,-表示隐藏区段(匿名区段也是隐藏区段),!表示需要粗体显示的区段。

SectionIn表示该区段和安装类型之间的关系

SubSection表示子区段


SectionIn insttype_index [insttype_index] ... [RO]

;RO修饰符表示不可修改。

SubSection [/e] Caption [subsection_name index output]

;修饰符/e用于该子区段的所有区段是否默认展开。

 


函数

包含了模块化的安装逻辑。

在nsi脚本中函数分为两种:用户自定义函数和回调函数。


用户自定义函数

用户自定义函数仅当是Call指令调用时才被执行,如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行Call语句和指令。

用户自定义函数的语法:


Function <函数名>

# some commands

FunctionEn

 


回调函数

回调函数则是由在特定的时间点触发的程序段。

例&#xff1a;


Function .onInit

MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo

Abort

gogogo:

FunctionEnd

 

安装逻辑回调函数

NSIS对于安装逻辑定义以下回调函数&#xff1a;

.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、.onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、.onVerifyInstDir
 

卸载逻辑回调函数

NSIS对于卸载逻辑定义以下回调函数&#xff1a;
un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort


基本语法


变量

nsi脚本用var关键字来定义变量&#xff0c;使用$来引用变量。

注意&#xff1a;变量是全局的并且是大小写敏感的。

除了用户自定义的变量外&#xff0c;nsi脚本中定义了寄存器变量0 0 9,R0 R0 R9用于参数传递&#xff0c;以及系统变量用于特定用途&#xff0c;这些变量主要有&#xff1a;

$INSTDIR
用户定义的解压路径。
$PROGRAMFILES
程序文件目录(通常为 C:\Program Files 但是运行时会检测)。
$COMMONFILES
公用文件目录。这是应用程序共享组件的目录(通常为 C:\Program Files\Common Files 但是运行时会检测)。
$DESKTOP
Windows 桌面目录(通常为 C:\windows\desktop 但是运行时会检测)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
$EXEDIR
安装程序运行时的位置。(从技术上来说你可以修改改变量&#xff0c;但并不是一个好方法)。
${NSISDIR}
包含 NSIS 安装目录的一个标记。在编译时会检测到。常用于在你想调用一个在 NSIS 目录下的资源时&#xff0c;例如&#xff1a;图标、界面……
$WINDIR
Windows 目录(通常为 C:\windows 或 C:\winnt 但在运行时会检测)
$SYSDIR
Windows 系统目录(通常为 C:\windows\system 或 C:\winnt\system32 但在运行时会检测)
$TEMP
系统临时目录(通常为 C:\windows\temp 但在运行时会检测)
$STARTMENU
开始菜单目录(常用于添加一个开始菜单项&#xff0c;使用 CreateShortCut)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
$SMPROGRAMS
开始菜单程序目录(当你想定位 $STARTMENU\程序 时可以使用它)。该常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
$SMSTARTUP
开始菜单程序/启动 目录。该常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$QUICKLAUNCH
在 IE4 活动桌面及以上的快速启动目录。如果快速启动不可用&#xff0c;仅仅返回和 $TEMP 一样。
$DOCUMENTS
文档目录。一个当前用户典型的路径形如 C:\Documents and Settings\Foo\My Documents。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量在 Windows 95 且 Internet Explorer 4 没有安装时无效。
$SENDTO
该目录包含了“发送到”菜单快捷项。
$RECENT
该目录包含了指向用户最近文档的快捷方式。
$FAVORITES
该目录包含了指向用户网络收藏夹、文档等的快捷方式。这个常量的内容(所有用户或当前用户)取决于SetShellVarContext 设置。默认为当前用户。
该常量在 Windows 95 且 Internet Explorer 4 没有安装时无效。
$MUSIC
用户的音乐文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量仅在 Windows XP、ME 及以上才有效。
$PICTURES
用户的图片目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量仅在 Windows 2000、XP、ME 及以上才有效。
$VIDEOS
用户的视频文件目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量仅在 Windows XP、ME 及以上才有效。
$NETHOOD
该目录包含了可能存在于我的网络位置、网上邻居文件夹的链接对象。
该常量在 Windows 95 且 Internet Explorer 4 和活动桌面没有安装时无效。
$FONTS
系统字体目录。
$TEMPLATES
文档模板目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
$APPDATA
应用程序数据目录。当前用户路径的检测需要 Internet Explorer 4 及以上。所有用户路径的检测需要 Internet Explorer 5 及以上。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量在 Windows 95 且 Internet Explorer 4 和活动桌面没有安装时无效。
$PRINTHOOD
该目录包含了可能存在于打印机文件夹的链接对象。
该常量在 Windows 95 和 Windows 98 上无效。
$INTERNET_CACHE
Internet Explorer 的临时文件目录。
该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。
$COOKIES
Internet Explorer 的 COOKIEs 目录。
该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。
$HISTORY
Internet Explorer 的历史记录目录。
该常量在 Windows 95 和 Windows NT 且 Internet Explorer 4 和活动桌面没有安装时无效。
$PROFILE
用户的个人配置目录。一个典型的路径如 C:\Documents and Settings\Foo。
该常量在 Windows 2000 及以上有效。
$ADMINTOOLS
一个保存管理工具的目录。这个常量的内容(所有用户或当前用户)取决于 SetShellVarContext 设置。默认为当前用户。
该常量在 Windows 2000、ME 及以上有效。 
$RESOURCES
该资源目录保存了主题和其他 Windows 资源(通常为 C:\Windows\Resources 但在运行时会检测)。
该常量在 Windows XP 及以上有效。 
$RESOURCES_LOCALIZED
该本地的资源目录保存了主题和其他 Windows 资源(通常为 C:\Windows\Resources\1033 但在运行时会检测)。
该常量在 Windows XP 及以上有效。
$CDBURN_AREA
一个在烧录 CD 时储存文件的目录。.
该常量在 Windows XP 及以上有效。
$HWNDPARENT
父窗口的十进制 HWND。
$PLUGINSDIR
该路径是一个临时目录&#xff0c;当第一次使用一个插件或一个调用 InitPluginsDir 时被创建。该文件夹当解压包退出时会被自动删除。这个文件夹的用意是用来保存给 InstallOptions 使用的 INI 文件、启动画面位图或其他插件运行需要的文件。
 


编译器指令

nsi脚本的编译器指令主要指仅在编译时刻执行的命令。这些命令主要用来包含文件、条件化编译、定义常量、定义宏等。定义常量和宏是编译器指令的最主要应用。

 


常用指令

文件、目录操作

File

作用&#xff1a;释放文件到当前输出路径。

如果使用了 /nonfatal 开关且当文件未找到时使用警告来代替错误

如果使用了 /a 开关&#xff0c;则被添加的文件的属性将会保持

如果使用了 /r 开关&#xff0c;匹配的文件将会在子目录里被递归的搜索。如果目录名匹配则所有包含的内容都会被递归添加&#xff0c;目录结构也会被保持

使用 /x 开关可以用来来排除文件或目录

例&#xff1a;

将ProjectFiles目录下的所有文件释放到输出目录


SetOutPath "$INSTDIR"

SetOverwrite ifnewer

File /r "ProjectFiles\*.*"

 

Delete

作用&#xff1a;从目标系统删除文件

例&#xff1a;删除文件


Delete "$SMPROGRAMS\Test.exe"

 

Rename

作用&#xff1a;把源文件重命名为目标文件

例&#xff1a;

重命名文件


Rename INSTDIR\file.extINSTDIR\file.extINSTDIR\file.dat

 

CreateDirectory

作用&#xff1a;创建 (递归创建) 指定的目录。当目录不能创建时会放置一个错误标记。你也可以指定一个绝对路径。

例&#xff1a;在默认Program Files目录下创建一个Temp目录


CreateDirectory "$SMPROGRAMS\Temp"

 

RMDir

作用&#xff1a;删除目录

例&#xff1a;

删除Resources及其子目录


RMDir /r $INSTDIR\Resources

 

SetOutPath

作用&#xff1a;设置输出路径($OUTDIR)且当路径不存在时创建(需要时会递归创建)。必须为绝对路径名&#xff0c;通常都使用 $INSTDIR。

例&#xff1a;

将用户定义的解压路径作为输出目录


SetOutPath $INSTDIR

 

CreateShortCut

作用&#xff1a;创建快捷文件.lnk 目标文件

例&#xff1a;

设置Test.exe的快捷方式Test.lnk&#xff0c;图标为Test.ico。


CreateShortCut "DESKTOP\Test.lnk""DESKTOP\Test.lnk""INSTDIR\Test.exe" "" "$INSTDIR\Resources\Picture\Icon\ Test.ico"

 

注册表操作

WriteRegStr、WriteRegExpandStr

作用&#xff1a;把字符串写入注册表。根键必须为下面列表之一&#xff1a;

HKCR 或 HKEY_CLASSES_ROOT

HKLM 或HKEY_LOCAL_MACHINE

HKCU 或HKEY_CURRENT_USER

HKU 或HKEY_USERS

HKCC 或HKEY_CURRENT_CONFIG

HKDD 或HKEY_DYN_DATA

HKPD 或HKEY_PERFORMANCE_DATA

SHCTX 或SHELL_CONTEXT

如果字串不能写入注册表则放置一个错误的标记。字串的类型为 REG_SZ 对应 WriteRegStr&#xff0c;或 REG_EXPAND_STR 对应WriteRegExpandStr。如果注册表键不存在则会自动创建。

例&#xff1a;

将程序信息写入注册表


Section -Post

  WriteUninstaller "$INSTDIR\uninst.exe"

  WriteRegStr HKLM "PRODUCTDIRREGKEY""""PRODUCTDIRREGKEY""""INSTDIR\Test.exe"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Test.exe"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"

  WriteRegStr PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"

SectionEnd

 

ReadRegDWORD

作用&#xff1a;读取注册表信息

例&#xff1a;

在注册表中读取.net 版本


Function GetNetFrameworkVersion

    Push $1

    Push $0

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Version"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Install"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Version"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version"

    StrCmp $1 "" &#43;1 &#43;2

    StrCpy $1 "2.0.50727.832"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version"

    StrCmp $1 "" &#43;1 &#43;2

    StrCpy $1 "1.1.4322.573"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Install"

    ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Version"

    StrCmp $1 "" &#43;1 &#43;2

    StrCpy $1 "1.0.3705.0"

    StrCmp $0 1 KnowNetFrameworkVersion &#43;1

    StrCpy $1 "not .NetFramework"

    KnowNetFrameworkVersion:

    Pop $0

 

    Exch $1

FunctionEnd

 

DeleteRegKey

作用&#xff1a;删除一个注册表键。如果指定了 /ifempty&#xff0c;则该注册表键仅当它无子键时才会被删除(否则&#xff0c;整个注册表键将被删除)。有效的根键值在后面的 WriteRegStr 列出。如果该键不能被删除(或如果它不存在)则会放置一个错误的标记。

例&#xff1a;

清除注册表信息


DeleteRegKey PRODUCTUNINSTROOTKEY"PRODUCTUNINSTROOTKEY"{PRODUCT_UNINST_KEY}"

DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

SetAutoClose true

 

INI文件操作

ReadINIStr 用户变量(输出) INI文件 区段 项

 

作用&#xff1a;读取INI文件。从 “INI文件” 的 “区段” 区段读取 “项” 的值并把该值输出到用户变量。如果该项未找到时会放置一个错误标记且该用户变量被赋为空值。

例&#xff1a;

读取TimeZoneZh.ini文件中Field 1区段的State项&#xff0c;将值输出到$0


ReadINIStr 0"0"PLUGINSDIR\TimeZoneZh.ini" "Field 1" "State"

 

外部调用

ReserveFile

作用&#xff1a;把文件保存在稍后使用的数据区块用于下面的调用。有时&#xff0c;预先打包文件&#xff0c;方便安装加速释放之用。

例&#xff1a;


ReserveFile "TimeZoneZh.ini"

 

Exec

作用&#xff1a;这应该算是常用的命令了,执行一个指定的程序并且立即继续安装,就是直接执行一个程序。

例&#xff1a;

安装Microsoft.NET.exe&#xff0c;程序不等待继续执行下个步骤。


Exec &#39;$INSTDIR\Microsoft.NET.exe

 

ExecWait

作用&#xff1a;执行一个指定的程序并且等待运行处理结束。

例&#xff1a;

静默安装Microsoft.Net.exe安装包&#xff0c;并等待安装包运行结束。


ExecWait &#39;INSTDIR\Microsoft.NET.exe/quiet/norestart′INSTDIR\Microsoft.NET.exe/quiet/norestart′R1

 

RegDLL

作用&#xff1a;载入指定的 DLL 并且调用 DllRegisterServer (或入口点名称&#xff0c;当指定之后)。当产生一个错误的时候会置一个错误标记(例如不能载入 DLL&#xff0c;不能初始化 OLE&#xff0c;不能找到入口点&#xff0c;或者函数返回任何其它错误 ERROR_SUCCESS (&#61;0))。

其实就是注册或加载你要的插件!

例&#xff1a;

注册TIMProxy.dll插件


regdll “$instdir\TIMProxy.dll”

 

UnRegDLL

作用&#xff1a;注销DLL插件

例&#xff1a;

注销TIMProxy.dll插件


unregdll “$instdir\TIMProxy.dll”

 

!include

作用&#xff1a;包含头文件

例&#xff1a;

引用"MUI.nsh"头文件


!include "MUI.nsh"

 

!insertmacro

作用&#xff1a;插入宏

例&#xff1a;

通过宏插入欢迎页面


!insertmacro MUI_PAGE_WELCOME

 

字符串操作

StrCpy

作用&#xff1a;复制字符串

StrCpy $0 "a bbbbbbbb" 就有$0 &#61; "a bbbbbbbb"

StrCpy $0 "a bbbbbbbb" 3就有$0 &#61; "a b"

 

StrCmp

作用&#xff1a;比较(不区分大小写)“字串1”和“字串2”&#xff0c;如果两者相等&#xff0c;跳转到“相同时跳转的标记”&#xff0c;否则跳转到“不相同时跳转的标记”。

 

逻辑操作

Push

作用&#xff1a;把一个字串压入堆栈&#xff0c;该字串可随后从堆栈里弹出。

 

Pop

作用&#xff1a;从堆栈里弹出一个字串到用户变量 $x。如果堆栈是空的&#xff0c;则会置一个错误标记。

 

if

&#xff08;1&#xff09; IfAbort 退出时要跳转的标记 [不是退出时要跳转的标记]

如果调用退出时它将返回 true

&#xff08;2&#xff09; IfErrors 错误时跳转的标记 [没有错误时跳转的标记]

检测并清除错误标记&#xff0c;如果设了错误标记&#xff0c;则跳转到“错误时跳转的标记”&#xff0c;否则跳转到“没有错误时跳转的标记”。

&#xff08;3&#xff09;IfFileExists 要检测的文件 文件存在时跳转的标记 [文件不存在时跳转的标记]

检测“要检测的文件”是否存在(可以用通配符&#xff0c;或目录)&#xff0c;并当文件存在时跳转到“文件存在时跳转”&#xff0c;否则跳转到“文件不存在时跳转”。

 

Goto

作用&#xff1a;跳转到指定标记。nsi脚本常常使用相对跳转表示条件分枝&#xff0c;其语法是[&#43;-][1-9]&#xff0c;加号表示从当前位置往前跳转&#xff0c;减号则表示从当前位置往后跳转。数字表示跳转的语句条数。

例&#xff1a;

按数字跳转


Goto &#43;4 ; 跳转以下4条语句

Goto -3 ; 跳转到前3条语句

例&#xff1a;

按标记跳转


name "NSISDemo"

outfile &#39;NSISDemo.exe&#39;

Section "NSISDemo"

ReadRegStr $R0 HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Test "DisplayVersion"

IntCmp $R0 "5.0" is5 lessthan5 morethan5  ;详情查看 帮助4.9.4.13 IntCmp

is5:

  DetailPrint "$R0 &#61;&#61; 5.0"

  Goto int

lessthan5:

  DetailPrint "$R0 <5.0"

  Goto error2

morethan5:

  DetailPrint "$R0 > 5.0"

  Goto error1

int:

MessageBox MB_OK  "你系统中现有版本为$R0&#xff0c;点击OK安装更新" IDOK 

DetailPrint "安装版本为: $R0"

goto done

error1:

MessageBox MB_ICONSTOP|MB_OK  "你系统中版本$R0高于更新版本" IDOK 

error2:

MessageBox MB_ICONSTOP|MB_OK  "你系统中版本$R0低于更新版本" IDOK 

done:

SectionEnd

 

MessageBox

作用&#xff1a;显示一个包含“消息框文本”的消息框。“消息框选项列表”必须为下面的一个或多个&#xff0c;多个使用 | 来隔开。

MB_OK - 显示 OK 按钮

MB_OKCANCEL - 显示 OK 和取消按钮

MB_ABORTRETRYIGNORE - 显示退出、重试、忽略按钮

MB_RETRYCANCEL - 显示重试和取消按钮

MB_YESNO - 显示是和否按钮

MB_YESNOCANCEL - 显示是、否、取消按钮

MB_ICONEXCLAMATION - 显示惊叹号图标

MB_ICONINFORMATION - 显示信息图标

MB_ICONQUESTION - 显示问号图标

MB_ICONSTOP - 显示终止图标

MB_TOPMOST - 使消息框在最前端显示

MB_SETFOREGROUND - 设置前景

MB_RIGHT - 右对齐文本

MB_RTLREADING - RTL 阅读次序

MB_DEFBUTTON1 - 默认为按钮 1

MB_DEFBUTTON2 - 默认为按钮 2

MB_DEFBUTTON3 - 默认为按钮 3

MB_DEFBUTTON4 - 默认为按钮 4

 


参考

官方论坛&#xff1a;http://forums.winamp.com/forumdisplay.php?s&#61;&forumid&#61;65

NSIS中文论坛&#xff1a;http://www.nsisfans.com/

轻狂志博客&#xff08;NSIS大神&#xff09;&#xff1a;http://www.flighty.cn/html/bushu/index.html


推荐阅读
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • Python ATM与购物车项目实战:深入解析三层架构设计
    本文详细解析了Python ATM与购物车项目的三层架构设计,重点介绍了MVC(Model-View-Controller)模式的应用。在用户界面层,系统通过图形化界面与用户进行交互,接收并处理用户的输入数据,随后将这些数据传递给控制层进行进一步处理。该层不仅负责展示信息,还承担了用户请求的初步处理任务。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 未定义的打字稿记录:探索其成因与解决方案 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • Python爬虫数据导出至CSV及图片存储技术详解
    Python爬虫数据导出至CSV及图片存储技术详解 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
author-avatar
mobiledu2502855463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有