惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
A
Arctic Wolf
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs
D
Docker
爱范儿
爱范儿
T
Tenable Blog
C
Check Point Blog
B
Blog
C
Cisco Blogs
Vercel News
Vercel News
The Cloudflare Blog
T
Threatpost
NISL@THU
NISL@THU
T
Tor Project blog
V2EX - 技术
V2EX - 技术
P
Palo Alto Networks Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
博客园 - 司徒正美
S
Security @ Cisco Blogs
GbyAI
GbyAI
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
The Register - Security
The Register - Security
Recorded Future
Recorded Future
Cloudbric
Cloudbric
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
Y
Y Combinator Blog
博客园_首页
T
Troy Hunt's Blog
The Hacker News
The Hacker News
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
U
Unit 42
AWS News Blog
AWS News Blog
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell

Sanonz

用 VS Code 编辑器开发 STM32 嵌入式 使用 FontCreator 编辑字体库 | Sanonz 使用 React Context API 和 Hooks 实现全局状态管理和性能优化 使用 Phonegap + Cordova 搭建混合开发平台 利用 Github Actions 自动部署 Hexo 博客 在 WEB 端实现亮/暗主题跟随系统功能 | Sanonz Metalness vs Specular Workflows for PBR Shading 以太坊概念与使用 wep3/infura 实现以太币及合约币交易流程 | Sanonz 实现树莓派(Raspberry Pi)联网发送本机IP到绑定的微信 | Sanonz 使用 Three.js 的 RenderTarget 实现离屏渲染 使用 redux-store-provider 简化 react 开发流程 浏览器 HTTP 并发请求规则探讨 | Sanonz JavaScript Event Loop、Micro Task、Macro Task WebAssembly 从入门到吃鸡 | Sanonz Let's Encrypt 使用教程,免费的 SSL 证书,让你的网站拥抱 HTTPS Let's Encrypt 使用教程,免费的 SSL 证书,让你的网站拥抱 HTTPS Ubuntu 搭建 php、mysql、nginx 开发环境 | Sanonz WebGL 三维教程 - 绘制矩形和点(二) | Sanonz WebGL 三维教程 - WebGL 介绍(一) Hexo 搭建静态博客与 hexo-theme-concise 主题使用教程 | Sanonz
使用 Invox Setup 实现 Electron 安装包界面美化
Sanonz · 2025-10-15 · via Sanonz

介绍

项目介绍

Electron Invox 是基于 Invox Setup 的 Electron 安装界面美化,支持一键打包 Electron 应用,使用 DuiLib UI + C++ 实现,安装包体积仅 2MB+,无需额外依赖,内置 Analytics 支持,可追踪安装/卸载行为,采用类 HTML 的 XML 布局方式,易于定制,支持中英文等多语言切换。

下载安装包体验:InvoxSetup-1.0.0.exe

项目原理

本安装程序采用模块化设计,各组件职责明确:

  • UI 层:基于 DuiLib 框架构建用户界面,构建快速安装和自定义安装、卸载界面
  • 逻辑层:C++ 实现完整的安装/卸载流程控制和错误处理机制
  • 资源打包:将目标应用程序打包为 app.7z 压缩包,嵌入安装程序资源中

安装流程

  1. 用户选择安装路径(快速安装使用默认路径,自定义安装可自由选择)
  2. 安装程序将内置的 app.7z 压缩包解压到目标目录
  3. 创建开始菜单和桌面快捷方式(可选)
  4. 写入注册表卸载信息
  5. 安装完成后可选择立即启动主程序(默认为 InvoxApp.exe,由 APP_EXE_NAME 宏定义)

技术特性

  • 支持 7z 格式高压缩比,减小安装包体积
  • 完整的回滚机制,安装失败或用户取消时自动清理
  • 多语言支持,根据系统语言自动切换界面
  • 安装过程实时进度反馈
  • 磁盘空间和权限预检查,避免安装失败

界面预览

快速安装自定义安装卸载界面

使用说明

安装 Visual Studio 2022 构建环境

  1. 下载安装工具:Visual Studio Community
  2. 选择勾选:使用 C++ 的桌面开发C++ ATL for latest v143 build tools (x86 & x64)
  3. 执行下载安装

运行 Electron 示例模版

下载源码

1
$ git clone --recurse-submodules git@github.com:sanonz/electron-invox.git

安装依赖

1
$ npm install

构建应用

一行命令即可构建 Electron 和 Invox Setup

1
2

$ npm run build:invox

运行 dist/InvoxSetup-1.0.0.exe 查看效果

在已有 Electron 项目中添加

添加 Invox Setup 为子仓库

1
$ git submodule add git@github.com:sanonz/invox-setup.git invox

导入构建脚本到项目

下载 build-invox.bat 构建脚本,在 package.json 汇总添加构建命令

1
2
3
4
5
6
7
8
9
{

"scripts": {
"build": "electron-vite build",
"build:unpack": "npm run build && electron-builder --dir",
"build:invox": "npm run build:unpack && build-invox.bat"
},

}

运行命令构建

1
$ npm run build:invox

配置说明

配置 Config.h

编辑 Config.h 中相关配置,改为自己的配置

应用程序配置

配置项说明
APP_NAMEInvoxApp应用程序名称
APP_PRODUCT_NAME1.0.0.0产品名称
APP_VERSION1.0.0.0完整版本号字符串
APP_PUBLISHERYourCompany发布者/公司名称
APP_EXE_NAMEInvoxApp.exe主程序可执行文件名
APP_UNINSTALL_NAMEUninstaller.exe卸载程序文件名

版权信息

  • APP_COPYRIGHT: Copyright © 2025 YourCompany
  • APP_DESCRIPTION: InvoxApp Installer & Uninstaller

用于显示在安装程序界面和应用程序属性中

网络端点

  • PRIVACY_URL: https://yourcompany.com/privacy.html

    • 隐私政策页面
  • ANALYTICS_ENDPOINT: https://api.yourcompany.com/analytics

    • 数据分析上报接口
    • 用于收集安装/使用统计信息

压缩率配置

这里的是指程序打包为 app.7z 的压缩率,选择不同压缩率会影响安装包大小

压缩率列表

目标参数
极致压缩率(小体积优先)-t7z -m0=lzma2 -mx=9 -mfb=273 -md=64m -ms=on -mmt=on
平衡速度与压缩率-t7z -m0=lzma2 -mx=7 -md=32m -mmt=on -ms=on
快速压缩(打包分发)-t7z -mx=3 -mmt=on -ms=off

默认压缩率

默认使用 平衡速度与压缩率,可在 build-invox.bat#L77 中修改压缩率,压缩率越高占用 CPU、内存也越大

UI 界面排版

可使用 DuiEditor 工具可视化排版,可查看 XML 结构,更改组件属性,不同属性的值可通过下拉选择修改,能很方便查看不同属性的类型及支持的值,改完实时预览最终展示效果,比古法手写 XML 要方便不少

注意事项

  1. 安装完成不会打开应用,检查 Config.h 中的 APP_EXE_NAMEapp.7z 中主程序一致
  2. DuiLib 的颜色为 0xAARRGGBB (Alpha, Red, Green, Blue) 格式,背景支持 Alpha 透明,字体不支持
  3. 使用 DuiLib 中的 Label 组件点击内容时不会触发 Notify 事件,需改为 Button 或者 Text 组件
  4. 在修改 Invox Setup 的 C++ 文件时注意保存的编码格式,一定要用 UTF-8 with BOM 格式,否则会出现编译报错以及乱码