Skip to content

emrg: Windows 安装器 PATH 注册 [Code] 化加固 + 版本 fallback 同步 0.2.1 - #395

Merged
argszero merged 2 commits into
masterfrom
feature/win-installer-path-robust
Aug 5, 2026
Merged

emrg: Windows 安装器 PATH 注册 [Code] 化加固 + 版本 fallback 同步 0.2.1#395
argszero merged 2 commits into
masterfrom
feature/win-installer-path-robust

Conversation

@argszero

@argszero argszero commented Aug 5, 2026

Copy link
Copy Markdown
Owner

背景

#394 修复了 Windows 安装后 emrg 不在 PATH 的根因(Inno 缺 ChangesEnvironment=yes 不广播 WM_SETTINGCHANGE),v0.2.1 已发布。但 #394 review 时提出的边缘情况未处理,本 PR 落地:

改动 1:PATH 注册 [Registry] → [Code](packaging/make-installer.sh,R119)

旧实现(R27)缺陷:

  1. NeedsPath 永不匹配:用未展开的字面 %USERPROFILE%\.emrg\install\binGetEnv('Path')(已展开为 C:\Users\...)比较 → 恒 True → 重复安装 PATH 段累积
  2. 自定义安装目录 PATH 错误:ValueData 写死 %USERPROFILE%\...\bin,用户改安装目录后 PATH 指向错误位置
  3. {olddata} 依赖值已存在:HKCU\Environment\Path 缺失(Windows Server / 精简镜像)时行为不确定

新实现 [Code] 显式读写:

改动 2:版本 fallback 同步 0.2.1

  • packaging/build-runtime.sh:103 version.txt fallback 0.2.0 → 0.2.1
  • packaging/make-installer.sh:27 VERSION fallback 0.2.0 → 0.2.1

否则 version.txt 生成失败时产出 0.2.0 安装包,与 v0.2.1 发布不一致(rant 验收项 4)。

验证

  • sh -n 两脚本语法通过
  • 提取生成的 emrg.iss 校验:[Registry] 段已移除、7 个函数/过程完整、begin/end 11:11 平衡
  • uv run pytest tests/ 466 passed
  • import run_client + emrg --help 通过

说明

Inno Pascal 无法在 macOS 本地编译,需在 CI windows runner(make-installer.sh windows 分支)实测验证。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1455. 自查确认:① NeedsPath 字面量永不匹配(重复安装 PATH 累积)与自定义目录 PATH 写死两大缺陷被 [Code] 方案正确修复;② ExpandConstant('{app}\bin') 真实路径 + 段边界去重幂等;③ SendMessageTimeoutW lpdwResult 已改 var 引用传递(初版值传递会写坏栈,已修正并 push);④ 版本 fallback 0.2.1 与 master 一致。sh -n + 466 pytest 通过。待 CI windows runner 实测 iscc 编译。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1459. 审查确认:① PathHasSegment 段边界匹配(';'+Upper+';' 包裹防 C:\Users 误判 c:\users);② PathRemoveSegment 大小写不敏感精确移除;③ AddBinDirToPath 用 ExpandConstant('{app}\bin') 展开真实安装目录(自定义目录正确)+ RegQueryStringValue 缺失时创建;④ 卸载 usPostUninstall 移除 + 广播;⑤ R118 ChangesEnvironment=yes 保留;⑥ 版本 fallback 0.2.1 两文件同步;⑦ 额外 commit 3187426 SendMessageTimeoutW var 传参修栈损坏;⑧ sh -n 双脚本语法通过。LGTM 2/3。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1457. 审查确认:① [Code] 化改造正确——PathHasSegment 段边界精确匹配(';'+seg+';' 防 C:\Users 与 c:\users 误判)、PathRemoveSegment 保留其余段相对顺序、AddBinDirToPath 用 ExpandConstant('{app}\bin') 展开真实安装目录(修复自定义目录 PATH 错误)+ RegQueryStringValue 缺失时创建(修复 {olddata} 依赖);② 卸载 usPostUninstall 移除 + 广播;③ R118 ChangesEnvironment=yes 保留;④ SendMessageTimeoutW var 传参修复合理;⑤ 版本 fallback 0.2.1 两文件同步;⑥ sh -n 双脚本语法通过。修复了 #394 review 指出的 3 个边缘情况。LGTM 2/3。

@argszero
argszero merged commit 5fe43ae into master Aug 5, 2026
1 check passed
argszero added a commit that referenced this pull request Aug 5, 2026
Co-authored-by: EMRG Evolution <emrg@argszero.dev>
@argszero
argszero deleted the feature/win-installer-path-robust branch August 5, 2026 08:37
argszero added a commit that referenced this pull request Aug 5, 2026
v0.2.2 已发布(#399 卸载彻底 + #401 Windows TUI + #395 PATH 加固),
README 中英双版补充:
1. Windows 安装行:PATH 自动注册 + 原生 TUI(cmd/PowerShell 直接 emrg)
2. 卸载说明:Windows 卸载彻底(kill GUI 防 daemon 复活 + 白名单全量清理
   + [UninstallDelete] 兜底删 install/,~/.emrg 无残留)

验证:470 passed + import OK(仅文档改动)。

Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant