Skip to content

[1.5.2 Patch] UI 路径展示去除 \\?\ 前缀并加强 rootDir 合法性校验 #58

Description

@weidonglang

用户反馈现象

用户在 1.3.0 首页看到默认根目录显示为:

\\?\C:\Dev\DevEnvs

用户反馈:

  • 不确定为什么普通目录前出现 \\?\
  • 不确定路径是否合法。
  • 担心这种写法是否影响反斜杠替换和后续使用。
  • 如果这是内部 Windows verbatim path,也不应该直接展示给普通用户。

问题判断

\\?\ 这类前缀可以作为 Windows 内部长路径处理形式,但 UI 展示、用户配置、README 示例、错误提示中不应直接暴露。否则用户会误以为根目录异常,降低信任感。

该问题不只影响首页默认根目录,也可能影响:

  • 安装根目录卡片。
  • DEVENV_HOME 展示。
  • JAVA_HOME 展示。
  • current 指针路径展示。
  • 运行时安装目录展示。
  • 项目启动向导路径展示。
  • C 盘急救、空间搬家、打开目录、报告导出中的路径展示。
  • 错误提示和日志中展示给用户看的路径。

修复目标

建立“内部路径”和“用户展示路径”的分层:

  • 内部执行可以使用 canonical / verbatim path。
  • UI、报告、toast、README 示例和用户可复制路径必须使用普通 Windows 路径。

具体要求

新增或统一路径处理函数:

normalize_user_input_path(input: &str) -> Result<PathBuf, String>
display_path_for_user(path: &Path) -> String
strip_windows_verbatim_prefix(value: &str) -> String
validate_managed_root(path: &Path) -> Result<(), String>

前端如有独立路径展示函数,也应统一调用。

rootDir 保存前校验

保存安装根目录前必须检查:

  1. 非空。
  2. 不是文件。
  3. 路径不存在时,提示将创建目录,并在执行前确认。
  4. 不允许保存到 Windows 系统目录。
  5. 不允许保存到 Program Files、Windows、System32 等高风险目录。
  6. 不允许保存到回收站、临时压缩包路径、网络不可达路径。
  7. 对盘符根目录如 D:\ 可规范化为 D:\DevEnvManager
  8. 去除首尾引号、重复斜杠、尾部多余斜杠。
  9. UI 展示必须去掉 \\?\ 前缀。

报告与错误提示要求

错误提示中必须展示用户可理解路径,例如:

当前安装根目录:C:\Dev\DevEnvs

不要展示:

\\?\C:\Dev\DevEnvs

除非是调试日志,并明确标注为内部路径。

测试要求

新增测试覆盖:

  • \\?\C:\Dev\DevEnvs 展示为 C:\Dev\DevEnvs
  • \\?\UNC\server\share 展示为可理解 UNC 路径。
  • "D:\DevEnvManager\" 去引号、去尾部斜杠。
  • D:\ 规范化为推荐根目录。
  • 系统目录被拒绝。
  • 文件路径被拒绝。

验收标准

  • 首页默认根目录不再显示 \\?\
  • 环境页、版本管理、项目向导、报告、toast 中展示路径均不暴露 \\?\
  • 保存 rootDir 前有合法性校验和明确错误提示。
  • cargo test --all-targets 通过。
  • npm run build 通过。
  • 文档或 release notes 记录该修复。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions