【win备份还原工具开发日记】04:开发执行协议与 VM 自动化踩坑
开发执行协议:先规划自审,再动手
-
五步固定顺序:规划(目标/影响模块/是否涉及下载·管理员·分区·WinRE·BCD/证据/回滚边界)→ 自审(是否违反"程序目录即工作目录"、未授权分区、ARM64 实机边界、网络规则、快照保护)→ 只做最小必要改动 → 验证(不得用 macOS 编译替代 Windows/WinRE 行为)→ 记录并升版本。
-
破坏性 VM 操作前重新确认目标盘符、GUID、快照和用户授权范围。
产品日志与 ARM64 构建边界
-
五类日志都在程序目录内,移动整个文件夹不依赖旧路径/注册表/
C:\ProgramData:logs\gui.log、logs\launcher-errors.log、logs\prepare-bootstrap.log、tasks\<ID>\prepare.log、tasks\<ID>\recovery.log。 -
日志格式固定为
[RFC3339] 事件;GUI 日志尽力写,任务准备/恢复的关键日志写失败仍算失败。 -
共享目录不能当
CARGO_TARGET_DIR:Parallels 共享文件系统不满足 Cargo 删除临时 archive 的语义,会出现os error 87(不是编译或测试失败);target 与测试目标必须写客体本地浅层路径,并显式指定共享源码的Cargo.toml。
VM 会话与 GUI 自动化踩坑
-
prlctl exec是 Session 0(服务会话):看不到用户 GUI,MainWindowHandle=0;跨会话拿到的 hwnd 去SendMessage报1400 ERROR_INVALID_WINDOW_HANDLE。绝不能跨会话注入点击/消息。 -
启动用户会话 GUI 的正确姿势:
schtasks /create ... /ru x /it /rl highest+ 无空格路径的包装批处理;/tr直接带空格路径+参数会ERROR_FILE_NOT_FOUND;必须/rl highest,否则自动提升弹 UAC 空等退出。 -
环境变量跨 UAC 提升会丢:
--tab N命令行参数才可靠;且main.rs对未知第一参数直接usage()退出,新增 CLI 参数必须加特判分支,否则 GUI 一闪而过。 -
正式包 exe 被运行中 GUI 锁定:
copy /y会"已复制 0 个文件",必须先taskkill /f /im;按 PID 精确杀可避免误杀用户会话实例。 -
其他小坑:PowerShell 5.1 无
IntPtr.Parse;复杂 PowerShell 写成.ps1别内联$_;截图用prlctl capture(没有screenshot子命令);EDIT 控件必须带WS_BORDER才看得出是输入框。
- 点赞
- 收藏
- 关注作者
评论(0)