增量更新包
增量包主要是对electron下面的resources目录下的app.asar文件和app.asar.unpacked文件夹进行替换,其实这样就是整体替换应用程序包,将应用进行整体更新,而外壳的electron框架不进行更新,所以需要针对应用程序app.asar文件和app.asar.unpacked文件夹用打包工具打一个exe安装包。
我们暂时还是介绍NSIS工具来制作增量包,首先需要将应用目录打包成app.asar,同时将忽略的文件和文件夹制作成app.asar.unpacked文件夹,我们将所在的resources文件夹全部进行打包成exe安装包。
electron/resources/
├── electron.asar
├── app.asar
└── app.asar.unpacked
在增量包制作过程的脚本中有如下功能点:
OS检测
因为electron只支持windows 7以上的平台,所以安装包脚本能够检测windows 7以下平台,则提示用户退出安装。
${If} ${AtLeastWin7}
DetailPrint "OS版本为: windows 7+"
${Else}
MessageBox MB_OK "本程序只能安装在 Windows 7 版本以上的操作系统!"
Abort
${EndIf}
是否有框架程序
要判断是否存在应用程序,如果没有该exe应用程序,说明从来没有安装过完整包,需要首先安装完整包,才会有增量更新包的安装。
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${EXE_NAME}.exe" "Path"
Strcmp $R0 "" 0 NoAbort
MessageBox MB_ICONEXCLAMATION|MB_OK "未找到程序安装目录,请运行完整安装程序后再运行本更新程序!"
Abort
NoAbort:
DetailPrint "程序已经安装"
静默安装
由于增量更新包用于自动更新,所以采用静默安装的方式来打包。
SetSilent silent
resources目录进行压缩成安装包
首先要读取完整安装包安装时候在注册表写入的exe所在的文件夹路径;然后将应用里面的resources文件夹进行压缩打包成exe,在执行解压的时候就可以直接替换了。
!define APP_DIR "electron\resources"
Section "MainSection" SEC01
SetOverwrite on
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${EXE_NAME}.exe" "Path"
SetOutPath "$R0\resources\"
File /r "${APP_DIR}\*.*"
SectionEnd
附录
更新包打包脚本示例:
; Titan_app.nsi
!define EXE_NAME "Titan"
!define PRODUCT_VERSION "1.5.1"
!define APP_DIR "electron\resources"
; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "nsProcess.nsh"
!include "WinVer.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "logo.ico"
!insertmacro MUI_PAGE_INSTFILES
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${EXE_NAME}.exe"
; MUI end ------
OutFile "${EXE_NAME}_${PRODUCT_VERSION}_app.exe"
Function .onInit
SetSilent silent
${nsProcess::KillProcess} "${EXE_NAME}.exe" $R2
Sleep 2000
${If} ${AtLeastWin7}
DetailPrint "OS版本为: windows 7+"
${Else}
MessageBox MB_OK "本程序只能安装在 Windows 7 版本以上的操作系统!"
Abort
${EndIf}
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${EXE_NAME}.exe" "Path"
Strcmp $R0 "" 0 NoAbort
MessageBox MB_ICONEXCLAMATION|MB_OK "未找到程序安装目录,请运行完整安装程序后再运行本更新程序!"
Abort
NoAbort:
DetailPrint "程序已经安装"
FunctionEnd
Section "MainSection" SEC01
SetOverwrite on
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${EXE_NAME}.exe" "Path"
SetOutPath "$R0\resources\"
File /r "${APP_DIR}\*.*"
SectionEnd
Function .onInstSuccess
Exec "$R0\${EXE_NAME}.exe"
FunctionEnd
最后用命令行来打包,下面是一条打包的测试命令:
makensis.exe Titan_app.nsi