UniGetUI 离线安装包制作完全指南:4步搞定无网环境部署
【免费下载链接】UniGetUIUniGetUI: The Graphical Interface for your package managers. Could be terribly described as a package manager manager to manage your package managers项目地址: https://gitcode.com/GitHub_Trending/wi/UniGetUI
UniGetUI 是 WinGet、Scoop、Chocolatey 等包管理器的图形界面工具,一套界面管好所有装包渠道。默认安装流程依赖在线拉取运行时组件,内网或断网机器上很容易卡住。这篇文章带你从源码出发,产出一个自包含一切依赖的 UniGetUI 离线安装包,拿到无网机器上双击就能装、装完就能用。
先弄清「离线」是怎么做到的
整个思路拆开看其实就三层:
- 应用自包含:
src/Directory.Build.props里PublishSelfContained=true,发布产物把 .NET 运行时一起打进unigetui_bin/,目标机器不用单独装 .NET。 - 安装包自包含:Inno Setup 脚本 UniGetUI.iss 把整个产物目录、以及 VC++ 运行时、WebView2 等依赖的安装器全部压进一个 EXE。
- 文件自检:产物里附带的
IntegrityTree.json(SHA256 哈希表)让应用启动时能核对自己有没有缺文件,这正是离线部署最怕的问题。
只要这三样齐了,装到断网机器上就是一个纯本地过程。
环境怎么备齐:.NET 10 SDK 与 Inno Setup 6
在一台Windows 10/11 64 位的联网机器上准备工具链,这里就是未来唯一需要网络的环节:
- .NET 10 SDK:版本由 global.json 锁定(
10.0.103,允许 rollForward),装高版本 SDK 即可满足。 - Inno Setup 6:只用它的命令行编译器
ISCC.exe,装在默认位置即可被构建脚本自动发现。 - 克隆源码:
git clone https://gitcode.com/GitHub_Trending/wi/UniGetUI cd UniGetUI为什么要在联网机上做?因为 Inno Setup 的依赖机制(见 InstallerExtras/CodeDependencies.iss)是在安装时才去下载 VC++/WebView2——离线包要么提前把这些依赖装进目标系统,要么安装时用开关跳过,后面细说。
构建产物怎么出:自包含 publish + 完整性树
UniGetUI.iss的[Files]段只认一个目录:仓库根目录下的unigetui_bin/。先把 Avalonia 主工程发布成 Windows x64 自包含产物,再把输出挪进unigetui_bin/:
dotnet publish src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj -c Release -p:Platform=x64 -r win-x64产物就位后,生成完整性树:
pwsh scripts/generate-integrity-tree.ps1 -Path unigetui_bin这一步会递归计算每个文件的 SHA256 并写入unigetui_bin/IntegrityTree.json。做完的效果:unigetui_bin/里既有UniGetUI.exe和全部运行时 DLL,又有一份可被运行时IntegrityTester核对的哈希清单,断网机启动应用时会用它自检文件完整性。
打包命令一次跑通:ISCC 与 iss 脚本要点
打包前先看 UniGetUI.iss 里三处和离线强相关的配置,心里有数再动手:
[Files]:部署unigetui_bin\*全量文件,外加一份安装包自身(UniGetUI.Installer.exe)用于日后免重装自修复。[Tasks]:提供regularinstall(常规安装,写注册表、建快捷方式)和portableinstall(便携安装,只往目录里放一个ForceUniGetUIMobile标记文件)两种模式,便携版适合 U 盘带走。SignTool=azsign:官方构建会数字签名,本地构建没有证书,打包前把它注释掉、并把SignedUninstaller改为no——scripts/build.ps1会自动完成这两处临时改写并恢复。
然后一条命令出包:
ISCC.exe UniGetUI.iss /Ooutput或者偷懒让 scripts/build.ps1 一条龙跑完:测试 → publish → 整理unigetui_bin/→ 刷新完整性树 → 找 ISCC 打包 → 输出 SHA256 校验和文件。它会自动禁用签名、自动定位ISCC.exe,产物统一落在output/目录,还附一份checksums.x64.txt方便你分发包时校验。
离线依赖怎么补齐:VC++、WebView2 与 netcorecheck
UniGetUI 本体自包含之后,剩下的外部依赖只有三个,处理方式各不相同:
| 依赖 | 作用 | 离线处理 |
|---|---|---|
| VC++ 2015-2022 运行时 | 部分组件依赖的 C++ 运行时 | 安装器默认在线补装;离线机上要么预装,要么安装时带/NoVCRedist跳过 |
| WebView2 运行时 | 应用内网页内容渲染 | 同上,预装或安装时带/NoEdgeWebView跳过 |
| netcorecheck_x64.exe | 检测目标机 .NET 环境 | 已随仓库放在 InstallerExtras/ 目录,打包时自动附带,无需额外处理 |
依赖探测逻辑在 InstallerExtras/CodeDependencies.iss:它先查注册表判断 VC++ 和 WebView2 是否已装,已装则完全跳过下载。所以如果你的离线机提前用别的渠道装好这两个组件,安装包全程零联网即可完成;反之就用/NoVCRedist /NoEdgeWebView参数跳过,接受目标机可能缺少对应运行时的风险。
成果怎么验证:断网装机实测
拿到output/UniGetUI Installer.exe后,建议在一台断网的虚拟机(或真实内网机)上走一遍:
- 核对产物:用
output/checksums.x64.txt里的 SHA256 值比对安装包,确认拷贝过程没坏文件。 - 常规安装:运行安装包选「常规安装」,装完启动 UniGetUI,确认能列出 WinGet/Scoop 等已装包——这一步顺带验证了完整性树自检通过。
- 便携安装:另选一台机器,装时勾选便携模式(
portableinstall),它不写注册表、不建快捷方式,目录整体拷走就能在任意机器运行,是 U 盘分发场景的最优解。 - 断网复验:全程不插网线,安装与启动均应无网络请求失败提示。
常见坑与延伸阅读
- 启动报缺文件 / 完整性校验失败:
unigetui_bin/里动过文件却没重新生成清单,重跑一次scripts/generate-integrity-tree.ps1 -Path unigetui_bin再打包即可。 - ISCC 报错找不到签名工具:确认
SignTool=行已注释、SignedUninstaller=no,别用官方签名配置打本地包。 - 构建时找不到 ISCC:说明 Inno Setup 6 没装或没装在默认路径,装好后重跑,或给
build.ps1加-SkipInstaller先出 zip 再手动打包。 - 想进一步理解安装器行为(进程杀活、更新标记、自修复部署),直接读 UniGetUI.iss 的
[Code]段;命令行与 IPC 能力可查 docs/CLI.md;构建体系与发布约定的权威说明在 AGENTS.md。
【免费下载链接】UniGetUIUniGetUI: The Graphical Interface for your package managers. Could be terribly described as a package manager manager to manage your package managers项目地址: https://gitcode.com/GitHub_Trending/wi/UniGetUI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考