2026 年接一个桌面端定制项目,最容易被低估的不是功能清单,而是客户现场那批机器的状态。需求文档里一句「支持 Windows 桌面端」,对交付意味着什么,很多项目要到联调第一周才对得齐。深圳的制造业、零售、物流客户尤其典型:办公区是新机器,车间和门店还是 2016 年前后的老终端。
中间往往还夹着几台不能停机、动了就断产的核心设备。这类项目真正翻车的地方,通常不在代码里。
2026 年的分水岭:Windows 10 的支持已经结束
微软支持文档写明,Windows 10 已于 2025 年 10 月 14 日终止支持,此后不再提供技术协助、功能更新和安全更新(Microsoft 支持:Windows 10 支持已结束)。这条时间线把桌面端定制项目推到一个很具体的位置:客户机器不再是一套统一基线。
能不能升到 Windows 11 取决于硬件,而不是预算。微软给消费者的扩展安全更新(ESU)计划可覆盖到 2027 年 10 月 12 日(同上文档),企业侧另有对应的 ESU 计划。也就是说,2026 到 2027 年这段时间,「Win10 与 Win11 混合基线」是常态,不是过渡期里的意外。
客户的安全审计盯的检查项非常硬:TPM 2.0、UEFI 固件、安全启动。这三项在老机器上大量缺失,并且不是软件层能补的。
先把升级门槛抄进盘点表
微软 Learn 列出的最低要求,本质就是一张给甲方 IT 的核查清单。做定制开发时把它原样抄进调研表,比事后解释为什么装不上省事得多(Windows 11 的要求)。
| 检查项 | 微软口径 | 对定制项目的实际影响 |
|---|---|---|
| 处理器 | 1 GHz 或更快,兼容的 64 位处理器或 SoC | 2016 年前后的机型大面积不满足 |
| 内存 | 4 GB 或更大 | 车间与门店终端常见 2GB–4GB 配置 |
| 存储 | 64 GB 或更大的可用磁盘空间 | 小容量 eMMC 终端直接出局 |
| 固件 | UEFI,支持安全启动 | 老机器多为 Legacy BIOS 引导 |
| TPM | 受信任的平台模块 TPM 2.0 | 缺失最常见,且无法用软件补齐 |
| 显示 | 720p、9 英寸或更大 | 决定界面最小分辨率的设计下限 |
| 网络 | 更新与部分功能需要 Internet 连接 | 隔离网环境必须配套离线方案 |
还有一处必须在项目里提前对齐。微软 Learn 的「Windows 11 的要求」页对「直接升级」写的是两条:「运行Windows 10版本 2004 或更高版本」「已安装 2021 年 9 月 14 日安全更新或更高版本」。Windows 10 终止支持说明页的常见问答里,条件写成「只有运行 Windows 10 版本 22H2 并满足最低硬件规格的Windows 10电脑才能升级」。两处都出自微软官方页面,条件写法并不一致,盘点时按更严的 22H2 执行。
立项第一周该完成的四张盘点表
这几张表不要当问卷发出去,直接在需求调研会上逐项填。填不出来的那一项,基本就是后面的返工点。
| 盘点表 | 必须采到的字段 | 采不到会怎样 |
|---|---|---|
| A 运行基线 | 设备型号与出厂年份、OS 版本含 build 号、CPU/内存/剩余磁盘、TPM 与固件模式、是否在域内、装了哪些安全软件 | 安装包装不上,或装上了被安全软件静默拦截 |
| B 外设清单 | 品牌型号、接口类型(USB/串口/网口)、驱动来源、厂商是否提供 SDK、单机同时在线台数 | 联调期才发现没有 SDK,功能要降级或重写驱动桥 |
| C 网络与权限 | 能否出外网、代理与白名单、是否 AD 域、安装权限是否开放、有无网络准入客户端 | 在线授权与自动更新方案整段作废 |
| D 数据落点 | 数据留本地还是上云、是否自带本地库、备份与导出要求、审计字段需求 | 事后改存储模型,等于重做一半业务逻辑 |
四张表里 C 最容易漏。「能不能出外网」这一个答案,同时决定授权模型、日志上报和升级通道三件事。客户 IT 一句「我们内网是隔离的」,方案里在线校验的部分就得重做。
D 也常被跳过。本地库的选择会反过来影响离线可用性、备份方式和后续的数据迁移成本,它不是部署阶段才考虑的事。
外设兼容:把「能识别」和「能稳定跑一天」分开测
外设问题通常在验收期集中爆发,因为设备被枚举到和业务能连续跑,是两件不同的事。驱动装了、指示灯亮了,不代表串口号不会在重启后漂移,也不代表连续打印 300 张标签不会卡住句柄。
图示:软件定制开发桌面端项目里,老旧工业终端与新设备之间由 USB 读卡器、串口线连接的现场场景
我们的做法是把兼容性测试拆成三轮,每轮留可查的记录:
- 冷启动识别:关机重启后按真实业务顺序插拔设备,核对枚举顺序与串口号是否稳定。串口漂移是最常见的故障源,尤其在同时接多台同类设备时。
- 连续业务流:按客户真实单据量跑满一个工作时段,观察句柄数、内存增长与断线重连是否正常。
- 异常注入:运行中拔线、断电重启、两个客户端同时抢同一台打印机,各做 20 次,记录失败率与恢复方式。
另一个必须写进交付物的是驱动来源:厂商驱动版本号、是否需要在客户域内分发、升级驱动后由谁做回归。这三行字没写清,问题会在半年后以「你们这套系统不好用」的形式回来。
无 SDK 的外设还有三条替代路径:键盘模拟、串口协议自解析、把厂商私有 DLL 包装成独立进程再调用。三条路径的开发量与稳定性差别很大,必须在立项周确认走哪条。
技术栈选型其实是被基线反向约束的
常见三路线:内嵌自有浏览器内核(Electron 一类)、依赖系统 WebView 的轻壳、原生或自绘 UI。它们的差别不在「先进」与否,而在安装包体积、目标机器资源、硬件直连能力、内网审计这四条约束下各能走多远。
| 路线 | 适合的情况 | 别用的情况 |
|---|---|---|
| 内嵌自有内核 | 界面复杂度高、目标机器较新、安装包体积不受限 | 磁盘余量紧、要求完全离线小包 |
| 依赖系统 WebView 轻壳 | 要求小安装包、目标机器已具备 WebView2 运行时 | 客户机器可能缺运行时且无法联网安装 |
| 原生或自绘 UI | 硬件直连、长时间连续运行、资源受限 | 团队没有该栈经验且交付周期紧 |
补充一个常被忽略的约束:依赖系统 WebView 的路线,前提是目标机器上已经装好对应运行时。内网隔离、又没有同网分发能力时,这个运行时本身就是一道安装障碍。微软的要求页也直接写明,Internet 连接是执行更新以及下载和使用部分功能所必需的。
我们自己在桌面 Agent 客户端上走的是 .NET 加 Avalonia 的路线,把交互渲染留在前端进程、把 agent host 独立成一个进程,性能验收只看首帧、内存、CPU 三项。选路线这件事,最后落在「谁能在两年后接着维护」,而不是发布当天的跑分。
内网离线部署与升级:三种通道和一条红线
客户出不了外网时,升级只有三种做法:全量离线包配合手工或脚本分发、局域网内架一台升级服务器、U 盘灰度。三种都能用,前提是有签名校验和可回滚。
签名、静默更新与回滚的具体做法这里不展开,只留一句:没有回滚能力的更新通道,等于把生产环境的开关交给第一次发布。
同样要注意的是安装包的分发范围和有效期。灰度批次要能明确到设备编号,而不是靠「运维人员记得先装哪几台」。
验收该交什么证据
「装好了、能用」不是验收结论。我们要求交付方给出五类可复现的东西,客户 IT 拿着能自己重跑一遍:
- 基线快照:每台验收机的 OS build 号与关键硬件字段,截图或导出均可。
- 外设三轮测试记录:设备型号、时间、结果、异常截图。
- 部署包校验:安装包哈希、签名主体、安装耗时。
- 断网走查录屏:拔掉网络后核心业务流程仍可用的完整走查。
- 回滚演练:从新版本退回上一版本的实际耗时与验证结果。
排期里必须单列的三项
老机器适配、外设驱动桥接、离线部署通道。这三项如果混进功能开发的工期里,结果通常是功能都做完了、系统上不了线。
工期与报价的构成逻辑,另有一篇软件开发报价与合同验收的核对清单拆得更细。这里只强调一点:这三项工作量的估算依赖前期盘点表的完成度,表越全,估算越准。
如果你正在评估桌面端可行性,或手上有一批存量系统要改造,先把设备清单发过来更快。优码云在深圳,做 AIcoding 与定制开发的混合交付,可以先做一轮运行环境盘点,再谈功能排期。可以从联系我们开始,也可以先看已交付案例。
常见问题
客户机器还停在 Windows 10,项目还能做吗?
能做,但基线必须写进合同附件。终止支持不等于不能运行,只是不再收到安全更新,微软对消费者的 ESU 计划可延到 2027 年 10 月 12 日,企业侧另有计划。如果客户选择在无安全更新的平台上继续用,交付文档要写清风险归属和后续升级路径。
桌面端一定要用 Electron 吗?
不必。按安装包体积、目标机器资源、硬件直连、内网审计四条打分,再叠加团队两年后的维护能力做判断。磁盘余量紧又要硬件直连的项目,往往不是内嵌内核的最优场景。技术栈怎么影响桌面端报价,这篇桌面端报价构成拆解给过具体口径。
外设没有 SDK,是不是就做不了?
多数情况能做,走三条替代路径:键盘模拟、串口协议自解析、厂商私有 DLL 独立进程化。三条都要在立项周确认,不能留到联调期才问客户要 SDK。
内网完全不能出网,自动更新怎么办?
局域网升级服务器,或离线包加签名校验,按设备批次灰度,保留一键回滚。更新通道和安装包分发要走同一套签名体系,否则客户的安全审计过不去。
整体流程怎么排、关键决策点在哪,我们写过一篇从需求梳理到交付验收的 6 个关键决策点,可以作为这份清单的上层框架。
