给禁止联网的工控现场做诊断 EXE:蓝盾诊断 V2.2 的架构与踩坑

举报
yd_265767709 发表于 2026/10/21 13:34:47 2026/10/21
【摘要】 前言:工控现场的技术支持有个共同噩梦——客户产线出问题,现场没外网、没 Python、操作员不会敲命令,故障只能靠电话里描述"就是……不太对"。于是我做了「蓝盾诊断」:一个单文件 EXE,现场双击就能跑完一轮网络/系统/安全/硬件检查,输出一份能直接发回来的报告。V2.2 版本的一些架构决策和踩坑记录如下。一、为什么是 PowerShell 而不是 Python工控机的典型画像:Window...

前言:工控现场的技术支持有个共同噩梦——客户产线出问题,现场没外网、没 Python、操作员不会敲命令,故障只能靠电话里描述"就是……不太对"。于是我做了「蓝盾诊断」:一个单文件 EXE,现场双击就能跑完一轮网络/系统/安全/硬件检查,输出一份能直接发回来的报告。V2.2 版本的一些架构决策和踩坑记录如下。


一、为什么是 PowerShell 而不是 Python

工控机的典型画像:Windows 7/10、无外网、无运行库、可能连 VC++ Redistributable 都不齐。PowerShell 是唯一系统自带的解释器——Windows 7 自带 2.0,Win10 自带 5.1。用 PowerShell 写,分发成本为零。

代价是生态简陋:没有 requests、没有 json 库的舒适封装、GUI 只能自己拼。诊断工具的核心是"把几十个检查命令组织起来",WPF + XAML 内嵌就能做出体面的界面,不需要引入任何外部依赖。

二、三个架构决策

1. Runspace 异步,别让 UI 冻死

诊断里有 ping、端口探测、WMI 查询,任何一个都可能卡 30 秒。如果直接在 UI 线程跑,窗口直接"未响应"。解法是 Runspace 池异步执行,UI 线程只管刷新进度:

2. 模块级 watchdog

EXE 在客户现场最怕两件事:卡死和"看起来跑完了但什么都没输出"。每个诊断模块包一层 watchdog——超时强制终止并记录"该模块超时",保证整个流程必定走到报告输出。宁可报告里有一行"安全检查超时",也不能让整个 EXE 白跑。

3. 三种自检模式

发布前自测是工控工具的生死线。V2.2 内置三档:SelfTest(纯逻辑,不碰系统)、AsyncTest(验证 Runspace 池)、GuiProbe(拉起真窗口点一遍按钮)。每次改完代码三档全跑,打包前再跑一遍——现场没有第二次机会。

三、打包踩坑

用 ps2exe 打包时踩了两个坑:

  1. 杀软误报:ps2exe 生成的 EXE 是常见的误报对象。解法是给 EXE 签名 + 提交微软白名单申诉,另一条路是分发 .ps1 + 一个两行的启动 .bat,现场执行策略用 -ExecutionPolicy Bypass -File 绕过;
  1. 版本兼容:脚本里用了 PS7 才有的语法(如三元运算符),在 Win7 的 5.1 上直接解析失败——EXE 还没跑就崩。最终坚持全脚本兼容 5.1,用 if/else 替代所有 PS7 语法。

四、输出设计

报告是自包含 HTML:每个模块一张表,失败项标红附修复建议,末尾一段"给远程工程师的摘要"。现场人员唯一要做的就是把这个 HTML 发回来。

五、总结

工控工具的设计约束和互联网产品完全相反:不是"功能多",而是"在 10 年前的系统上、由非技术用户、一次成功"。PowerShell 单文件、异步防卡死、watchdog 兜底、三档自检——每一层都是为了"现场没有第二次机会"。


(完)环境:Windows 7/10 / PowerShell 5.1 / ps2exe / 2026-10 实测

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。