安装包UI美化之路-Electron打包出界面美观,这三步就够了!
cac55 2025-05-21 12:15 12 浏览 0 评论
这篇文章应该说是《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》的延伸与进一步应用,在可视配置的基础之上,生成供electron-builder打包的脚本!
一直有朋友反馈,不知道如何将nsNiuniuSkin与Electron打包结合起来;我综合整理了一下,大家的担心无外乎以下几点:
- 如何将elecron-builder的打包流程与nsNiuniuSkin的打包流程整合起来,形成一个统一的流程?
- nsNiuniuSkin打包出来的安装包,如何与electron-updater的升级流程对接上?
- 使用nsNiuniuSkin打包出来的安装包,如何与之前electron-builder打包出来的安装包兼容?
原理理论
今天我们就来一次把这几个问题聊个透,先看前两个问题,我们通过三个最简单的步骤来实现完整的与electron-builder整合在一起的打包流程。
使用Electron开发软件,发布时一般采用electron-builder来进行文件打包与发布,同时其相应的ci/cd流程也都是在这个基础上进一步施行;基于此,我们可以将nsNiuniuSkin打包的配置生成一个打包的脚本,然后嵌入到electron-builder的scripts中;这样一来,对于原始的打包流程没有任何影响,只需要简单三步就可以配置好了。
三步打包出来功能完善,界面美观的安装包
1. 在可视化配置界面上,配置基础打包参数,以及与Electron相关的配置
有几个需要注意的地方:
- 基础配置的各个细节,请参考《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》
- 几个特殊参数的配置说明
配置名称 | 用途 | 备注 |
打包模式 | 要打的安装包类型及压缩方式 | 7z:先压缩成app.7z,再进行打包 |
是否打包Electron | 表示是否是要打包Electron程序 | 此时固定为0值,因为我们是被electron-builder调用 |
是否生成latest.xml | 是否打包完成后,生成用于electron-updater的latest.xml | latest.xml中包含安装包文件名、版本号以及安装包的sha512的值,此处选择1 |
软件安装注册表标识 | 在注册表中,安装信息保存的位置,如: | 如果开启Electron打包,将会以package.json中的guid来使用,此时我们自己根据产品信息来指定 |
安装路径注册表Key | 在注册表中,安装路径保存的位置,如: | Electron相关打包,请使用InstallLocation |
安装包名称 | 最终打出来的安装包的文件名,如: | 此处我们配置成 " |
产品版本号 | 产品版本号,如: | 此处我们配置成 %npm_package_version% |
特殊说明:
一个软件的安装包,其他的信息都是相对固定的,只有版本号会随着代码的增加而进行调整;所以我们将软件名称、安装包名称前缀等都固定设置,进一步将产品版本号与安装包后缀指定为electron-builder的环境变量,由electron-builder在打包的时候,自动的从package.json配置所形成的环境变量中读取相应的变量值,来得到最终的版本号和安装包名称。
配置设置好后,点击保存配置(此时由于是用来生成供electron-builder来集成,所以用了环境变量,此时在界面上点击生成安装包将会报错)。
2. 将生成的命令行参数复制到package.json的scripts配置脚本中
经过上一步的配置,将会在gui_package.bat所在目录下生成一个名叫
generate_leeqia_mountain_7z_cmdline.txt的文件,打开此文件,内容如下:
python ../package.py --project_name=\"leeqia_mountain\" --package_mode=1 --need_sign=False --build_for_electron=False --generate_latest_file=True --files_toinstall_name=\"FilesToInstall\" --uninst_file_name=\"uninst.exe\" --src_files_dir=\"./NiuNiuCaptureElectronDemo/dist/win-unpacked\" --PRODUCT_NAME=\"利洽科技截图控件\" --PRODUCT_NAME_EN=\"Leeqia ScreenCapture\" --INSTALL_OUTPUT_NAME=\"TestCapture_Setup_v%npm_package_version%.exe\" --PRODUCT_VERSION=\"%npm_package_version%\" --EXE_NAME=\"TestCapture.exe\" --INSTALL_LOCATION_KEY=\"InstallLocation\" --INSTALL_APPEND_PATH=\"Leeqia_Capture\" --PRODUCT_PATHNAME=\"Leeqia_Capture\" --INSTALL_DEFALT_SETUPPATH=\"$PROGRAMFILES32\\${INSTALL_APPEND_PATH}\" --INSTALL_DEFAULT_SHOTCUT=1 --INSTALL_DEFAULT_AUTORUN=0 --INSTALL_EXECUTION_LEVEL=\"admin\" --INSTALL_MODE_ALL_USERS=\"all\" --INSTALL_DOWNLOAD_BASEURL=\"http://www.ggniu.cn/test_online_install/\" --PRODUCT_LEGAL=\"Leeqia Copyright(c)2020\" --PRODUCT_PUBLISHER=\"Leeqia\" --TEST_SLEEP=0
复制内容,粘贴到package.json的scripts脚本中的指定位置,如下:
{
"name": "TestCapture",
"version": "1.0.0",
"main": "main.js",
"description": "",
"author": "support@leeqia.com",
"build": {
"appId": "appid",
"nsis": {
"guid": "Test_Capture"
},
"extraFiles": [
"capture"
],
"win": {
"icon": "app.ico"
},
"publish": [
{
"provider": "generic",
"url": "http://127.0.0.1:8080/update/"
}
]
},
"devDependencies": {
"electron": "8.5.5",
"electron-builder": "23.6.0"
},
"dependencies": {
"electron-log": "^5.0.0-beta.16",
"electron-updater": "^5.3.0"
},
"scripts": {
"pack": "npm run clear-dist & npm run build ",
"clear-dist": "rmdir dist /s /q",
"build": "electron-builder --win && python ../package.py --project_name=\"leeqia_mountain\" --package_mode=1 --need_sign=False --build_for_electron=False --generate_latest_file=True --files_toinstall_name=\"FilesToInstall\" --uninst_file_name=\"uninst.exe\" --src_files_dir=\"./NiuNiuCaptureElectronDemo/dist/win-unpacked\" --PRODUCT_NAME=\"利洽科技截图控件\" --PRODUCT_NAME_EN=\"Leeqia ScreenCapture\" --INSTALL_OUTPUT_NAME=\"TestCapture_Setup_v%npm_package_version%.exe\" --PRODUCT_VERSION=\"%npm_package_version%\" --EXE_NAME=\"TestCapture.exe\" --INSTALL_LOCATION_KEY=\"InstallLocation\" --INSTALL_APPEND_PATH=\"Leeqia_Capture\" --PRODUCT_PATHNAME=\"Leeqia_Capture\" --INSTALL_DEFALT_SETUPPATH=\"$PROGRAMFILES32\\${INSTALL_APPEND_PATH}\" --INSTALL_DEFAULT_SHOTCUT=1 --INSTALL_DEFAULT_AUTORUN=0 --INSTALL_EXECUTION_LEVEL=\"admin\" --INSTALL_MODE_ALL_USERS=\"all\" --INSTALL_DOWNLOAD_BASEURL=\"http://www.ggniu.cn/test_online_install/\" --PRODUCT_LEGAL=\"Leeqia Copyright(c)2020\" --PRODUCT_PUBLISHER=\"Leeqia\" --TEST_SLEEP=0",
"dist": "electron-builder --win "
}
}
到这一步,所有的配置都已经配置好了,electron-builder打包的过程中,将会从package.json中的version字段的值替换到脚本中,以此来完成最终的打包,是不是特别简单呢?
再次提醒,其他的一些基本参数,比如是否开机启动,是否创建桌面快捷方式这些,请参考《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》来进行配置。
3. 执行打包,等待结果
执行打包指令:
npm run build
这个流程将会全自动地做如下几件事情:
- electron-builder打包,生成unpacked files
- 从unpacked files目录复制文件到nsNiuniuSkin的待打包文件目录下
- 执行nsNiuniuSkin的打包流程,打包出界面美观,功能完善的安装包
- 根据安装包名称和版本号,生成latest.yml文件
耐心等待后,最终生成的安装包如下:
此时我们生成了安装包,同时生成了供electron-updater升级检测时使用的latest.yml,只需要将安装包和latest.yml发布到服务器上,自动升级流程就能无缝衔接了。
运行效果如下:
使用nsNiuniuSkin打包出来的安装包,如何与之前electron-builder打包出来的安装包兼容
如果是一个全新的项目,在此之前并没有使用electron-builder制作出来的原生安装包进行过发布,则不需要关注这部分内容。
如果线上已经有旧的由electron-builder制作出来的安装包发布了,接下来由nsNiuniuSkin制作出来的安装包还需要兼容的话,需要考虑如下几个问题:
- 安装信息在注册表中的注册表项
- 是安装到当前用户还是所有用户,安装包是否以管理员权限启动
- 扩展安装路径(确保安装路径的最后一层一致,这个可以使用旧的安装包安装后,找到其安装路径即可获取)
要实现与旧版本的兼容,其实非常简单,就是获取到旧的安装包的上述核心安装信息,设置到我们的可视化配置向导中即可。
1. 获取旧安装包的配置信息
如果上述信息都能够在原始的package.json中找到明确的配置值,那直接将这些值配置应用到可视化配置向导中即可;如果没有配置,则需要将旧的安装包利用7zip来解压,得到一个nsi文件,从这个文件中进行提取(除了“安装信息在注册表中的注册表项”外,其他的应该都能够在package.json中有配置,或有特定的默认值)。
解压后,我们搜索SetShellVarContext,将会看到如下一段脚本代码:
StrCpy $_18_ CurrentUser
SetShellVarContext current
ReadRegStr $_19_ HKCU Software\Test_Capture InstallLocation
StrCmp $_19_ "" label_321
StrCpy $INSTDIR $_19_
其中:
- SetShellVarContext current 表示安装到当前用户下,这个其实也间接表示此安装包是以非管理员权限启动
- Software\后面的Test_Capture 表示软件安装信息在注册表中的面的名称,与我们package.json中的guid匹配,如果没配置guid,此处可能是一个GUID字符串
有了上述信息,现在我们需要的所有信息都得到了:
- 安装到当前用户下
- 安装包以普通用户权限启动
- 软件安装信息在注册表中的项的名称为Test_Capture
- 软件安装路径在注册表中的Key的名称为InstallLocation(所有Electron程序默认的值)
2. 兼容旧安装包的可视化配置项说明
配置名称 | 用途 | 备注 |
扩展路径名称 | 安装时要追加的文件夹名称,如: | 扩展文件夹是为了安装的文件都在我们特定的目录下 |
软件安装注册表标识 | 在注册表中,安装信息保存的位置,如: | 如果开启Electron打包,将会以package.json中的guid来使用 |
安装路径注册表Key | 在注册表中,安装路径保存的位置,如: | Electron相关打包,请使用InstallLocation |
默认安装路径 | 安装包首次打开时,默认的安装路径: | 需要结合是否是安装到所有用户下,以及安装包执行权限来决定默认路径 |
安装包执行权限 | 是否以管理员权限启动安装包:admin/user | 如果选择管理员权限,建议安装到所有用户下, |
安装到当前用户 | 安装到当前用户还是所有用户:all/current | 如果选择管理员权限,建议安装到所有用户下, |
自定义配置宏中,有多个参数相互关联,比如默认安装位置、安装包执行权限、是否安装到所有用户:
- 如果安装到所有用户下,那么需要开启安装包管理员执行权限,同时默认安装路径请选择与特定用户无关的路径
- 如果安装到当前用户下,那么建议不要开启管理员权限,默认安装路径建议选择: $APPDATA${INSTALL_APPEND_PATH} 或 $LOCALAPPDATA${INSTALL_APPEND_PATH}
相应调整后的配置如下:
根据此配置,按照上述的三步流程的操作,即可打包出来兼容旧版本升级覆盖的安装包啦!
结语
nsNiuniuSkin可视化配置向导中的各个参数,均是与package.py中的命令行参数一一对应的;现在我们提供进一步的说明,生成命令行后,集成到electron-builder的打包流程中,进一步简化打包流程,希望对您打包Electron程序有帮助!
在安装包安装过程中,精美的UI往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!
愿天下没有难做的安装包!
相关推荐
- 无力吐槽的自动续费(你被自动续费困扰过吗?)
-
今天因为工作需要,需要在百度文库上下载一篇文章。没办法,确实需要也有必要,只能老老实实的按要求买了个VIP。过去在百度文库上有过类似经历,当时为了写论文买了一个月的VIP,后面也没有太注意,直到第二个...
- 百度文库推出“文源计划”创作者可一键认领文档
-
11月7日,百度文库发布了旨在保护创作者权益的“文源计划”。所谓“文源计划”,即为每一篇文档找到源头,让创作者享受更多的权益。据百度文库总经理李小婉介绍,文源计划分为三部分,分别是版权认证、版权扶持和...
- 有开放大学学号的同学,百度文库高校版可以用了。
-
还在网上找百度文库的下载方式,只要从身边的朋友在读开放大学的,那他(她)的学号就可以登陆到国家开放大学图书馆,还使用百度文库高校版来下载。与百度文库稍有不同,但足够使用了。现转国图链接如下:htt...
- 搜索资源方法推荐(搜索资源的方法)
-
今天msgbox就要教大家如何又快又准的搜到各类资源,第一点,排除干扰百度搜索出来啊经常前排展示它的产品以及百度文库,如何去除呢?很简单,后面输入空格减号百度文库,比如你搜高等数学百度文库很多,只要后...
- 一行代码搞定百度文库VIP功能(2021百度文库vip账号密码共享)
-
百度文库作为大家常用查资料找文档的平台,大多数文档我们都可以直接在百度文库找到,然而百度文库也有让人头痛的时候。好不容易找到一篇合适的文档,当你准备复制的时候他却提示你需要开通VIP才能复制~~~下载...
- 百度文库文档批量上传工具用户说明书
-
百度文库文档批量上传工具用户说明书1、软件主要功能1、批量上传文档到百度文库,支持上传到收费、VIP专享、优享以及共享。2、支持自动分类和自动获取标签3、支持多用户切换,一个账户传满可以切换到...
- 百度文库现在都看不到文档是否上传成功,要凉了吗?
-
打开知识店铺,百度文库文档里显示都是下载这一按键,上传的文档也看不到是否成功?咋情况,要取消了吗?没通过审核的也不让你删除,是几个意思,想通吃吗?现在百度上传文档也很费劲,有时弄了半天的资料上传审核过...
- 微信推广引流108式:利用百度文库长期分享软文引流
-
百度文库相对于百度知道、百度百科来说,操作上没那么多条条框框,规则上也相对好把握些。做一条百度知道所花费的精力一般都会比做一条百度文库的要多些,老马个人操作下来觉得百度文库更好把握。但见仁见智吧,今天...
- 职场“避雷”指南 百度文库推出标准化劳动合同范本
-
轰轰烈烈的毕业季结束了,众多应届生在经过了“职场海选”后,已正式成为职场生力军的一员。这一阶段,除了熟悉业务,签订劳动合同、了解职场福利也迅速被提上日程。而随着国人法律意识的增强,百度文库内《劳动合同...
- 《百度文库》:素材精选宝库(百度文库官网首页)
-
《百度文库》:独特功能助力选择高质量素材在当今信息爆炸的时代,如何高效地获取并利用有价值的素材成为了许多人面临的挑战。而《百度文库》作为百度公司推出的一款在线文档分享平台,凭借其丰富的资源、强大的功能...
- 深度整合和开放AI能力 百度文库和网盘推出内容操作系统「沧舟OS」
-
【TechWeb】4月25日消息,Create2025百度AI开发者大会上,百度文库和百度网盘推出全球首个内容操作系统——沧舟OS。基于沧舟OS,百度文库APP全新上线「GenFlow超能搭子」...
- 女子发现大二作业被百度文库要求付费下载,律师:平台侵权,应赔偿
-
近日,28岁的黎女士在百度百科搜索家乡的小地名时,发现了自己在大二完成的课题作业。她继续搜索,发现多个平台收录了该文,比如豆丁网和文档之家等,有的还设置了付费或积分下载。2月15日,九派新闻记者以用户...
- 2016杀入百度文库的新捷径,只有少数人才知道的喔
-
百度的产品在SEO优化中的分量真不用多说,其实很多人都像我一样一直在找捷径。但是我经常发现很多人都是在用死方法。比如发贴吧发帖而不知道去申请一个吧主,知道自问自答而不知道去申请一个合作资格。口碑和贴吧...
- 百度文库付费文档搜索方法(百度文库付费文档搜索方法有哪些)
-
一直以来,百度文库中无论是个人中心还是个人主页,都没有像淘宝一样的店内搜索功能,连最近新开的知识店铺也没有设计店内搜索功能,这无论是对上传用户还是下载用户都不方便,上传用户想要搜索自己的文档无法办到...
- 供读者免费使用!泰达图书馆机构版百度文库新年上新啦
-
在泰达图书馆读者使用百度文库数字资源不需要VIP,免-费-用!惊不惊喜?快来了解一下吧……新年伊始,为满足区域企业、高校、科研院所以及居民群众在教学、科研及学习过程中,对各类文献资源的需求,泰达图书馆...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)