【win备份还原工具开发日记】04:开发执行协议与 VM 自动化踩坑

举报
任正非 发表于 2026/10/05 07:56:15 2026/10/05
【摘要】 开发执行协议:先规划自审,再动手五步固定顺序:规划(目标/影响模块/是否涉及下载·管理员·分区·WinRE·BCD/证据/回滚边界)→ 自审(是否违反"程序目录即工作目录"、未授权分区、ARM64 实机边界、网络规则、快照保护)→ 只做最小必要改动 → 验证(不得用 macOS 编译替代 Windows/WinRE 行为)→ 记录并升版本。破坏性 VM 操作前重新确认目标盘符、GUID、快照...

开发执行协议:先规划自审,再动手

  1. 五步固定顺序:规划(目标/影响模块/是否涉及下载·管理员·分区·WinRE·BCD/证据/回滚边界)→ 自审(是否违反"程序目录即工作目录"、未授权分区、ARM64 实机边界、网络规则、快照保护)→ 只做最小必要改动 → 验证(不得用 macOS 编译替代 Windows/WinRE 行为)→ 记录并升版本。

  2. 破坏性 VM 操作前重新确认目标盘符、GUID、快照和用户授权范围。

产品日志与 ARM64 构建边界

  1. 五类日志都在程序目录内,移动整个文件夹不依赖旧路径/注册表/C:\ProgramData:logs\gui.log、logs\launcher-errors.log、logs\prepare-bootstrap.log、tasks\<ID>\prepare.log、tasks\<ID>\recovery.log。

  2. 日志格式固定为 [RFC3339] 事件;GUI 日志尽力写,任务准备/恢复的关键日志写失败仍算失败。

  3. 共享目录不能当 CARGO_TARGET_DIR:Parallels 共享文件系统不满足 Cargo 删除临时 archive 的语义,会出现 os error 87(不是编译或测试失败);target 与测试目标必须写客体本地浅层路径,并显式指定共享源码的 Cargo.toml。

VM 会话与 GUI 自动化踩坑

  1. prlctl exec 是 Session 0(服务会话):看不到用户 GUI,MainWindowHandle=0;跨会话拿到的 hwnd 去 SendMessage 报 1400 ERROR_INVALID_WINDOW_HANDLE。绝不能跨会话注入点击/消息。

  2. 启动用户会话 GUI 的正确姿势:schtasks /create ... /ru x /it /rl highest + 无空格路径的包装批处理;/tr 直接带空格路径+参数会 ERROR_FILE_NOT_FOUND;必须 /rl highest,否则自动提升弹 UAC 空等退出。

  3. 环境变量跨 UAC 提升会丢:--tab N 命令行参数才可靠;且 main.rs 对未知第一参数直接 usage() 退出,新增 CLI 参数必须加特判分支,否则 GUI 一闪而过。

  4. 正式包 exe 被运行中 GUI 锁定:copy /y 会"已复制 0 个文件",必须先 taskkill /f /im;按 PID 精确杀可避免误杀用户会话实例。

  5. 其他小坑:PowerShell 5.1 无 IntPtr.Parse;复杂 PowerShell 写成 .ps1 别内联 $_;截图用 prlctl capture(没有 screenshot 子命令);EDIT 控件必须带 WS_BORDER 才看得出是输入框。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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