OwO! Win Deployer v1.2.6.1
v1.2.6.1 — 2026-07-01
修复
- 🩹 断网时「软件安装中心」不再卡在「正在检测」——本次核心修复:修复了计算机未联网(或 winget 无法访问软件源)时,软件安装中心页面永久卡在加载 / 检测状态、无法进入的致命问题。
- 根因:检测阶段对每个清单软件都单独执行一次
winget list --id <id>(约 150 个 winget 项),而每次 winget 调用都会联系其软件源——联网时单次也要约 12~13 秒,断网时更会一直阻塞。以 8 路并发计算,整轮检测累计需 150 秒以上,断网时体感即「永久卡死」;此前每次调用 8 秒的超时反而比 winget 联网时的真实耗时还短,会把调用杀在半路,导致已安装软件被误判为「未安装」。 - 修复:每轮检测只执行 一次
winget list(加锁的共享任务,避免并发检测各跑一次),其余全部软件的 winget id 归属改为在内存中按空白分词精确查表判定(重定向输出不会截断长 id,如Microsoft.VisualStudioCode也能正确匹配);单次调用超时提高到 25 秒,联网时不再被误杀,断网时也有明确上限。 - 新增
Detection.WingetReachable状态:当那一次winget list超时(判定为断网)时,更新检查会直接跳过自己的 winget 调用,避免再额外空等一次超时。 - 为
Proc.RunAsync增加可选的timeoutSeconds参数(基于链接取消令牌 + 超时后杀进程树),供所有可能因断网而无限阻塞的外部命令调用使用。 - 对
MainViewModel.DetectAllAsync增加try/finally兜底,确保即使检测过程中出现异常,加载状态(IsLoading)也一定会被清除,页面不会卡死。 - 实测:全量
windeploy plan --all(328 项)由 150 秒以上降至约 14 秒(联网冷启动一次winget list;热启动约 2 秒),且已安装的 winget 应用(含长 id 的 VS Code、winget-bundle 的 VC++ 运行库合集)均正确识别。
- 根因:检测阶段对每个清单软件都单独执行一次
调整
- 构建脚本迁移到
scripts/:build.ps1、preview.ps1由仓库根目录移动到scripts/目录(与publish.ps1等其他脚本统一);修正build.ps1的仓库根路径解析($PSScriptRoot→Split-Path -Parent $PSScriptRoot),移动后仍能正确定位src/与Directory.Build.props。
新增
- 无。
删除
- 无。
一键在任意 Windows 设备上复刻开发环境、应用与个人配置。三种发行形态任选,均自带 catalog/ configs/ assets/ 数据:
| 下载 | 说明 | 免装 .NET | 体积 |
|---|---|---|---|
…-win-x64-singlefile.zip |
单文件版(推荐):解压后一个 WinDeploy.exe + 数据目录 |
✅ | 中 |
…-win-x64-with-runtime.zip |
集成运行环境版:多文件、自带 .NET 运行库,杀软启发式误报更低 | ✅ | 大 |
…-win-x64-framework.zip |
纯 App 版:体积最小,需先装 .NET 10 桌面运行时 | ❌ | 小 |
WinDeploy.exe |
仅 GUI 单文件,供 bootstrap.ps1 直链下载 |
✅ | 中 |
⚠️ 程序未做代码签名时,Windows 可能提示「未知发布者」或被 Defender 拦截 —— 这属于无签名安装类软件的正常现象,可点「更多信息 → 仍要运行」,或参见 README 的「被拦截怎么办」。彻底解决需 Authenticode 代码签名(仓库已内置签名流水线,配置证书后自动生效)。许可证:CC BY-NC-SA 4.0(署名 / 非商业 / 相同方式共享;作者保留商业权利)。
Full Changelog: v1.2.6...v1.2.6.1