AskaEth
23e98635dd
feat(core): JDK 发现补 Microsoft 注册表支(HKLM\SOFTWARE\Microsoft\JDK\*\MSI\Path)(M281)
`registry_homes()` 原来只读 `HKLM\SOFTWARE\JavaSoft\JDK`,而 MS JDK 的 MSI 把安装路径
登记在 `HKLM\SOFTWARE\Microsoft\JDK\<ver>\<flavor>\MSI` 的 `Path`(本机 21/25 两条,
JavaSoft 那个键在本机根本不存在)。装在自定义目录(不在 Program Files 下)的 MS JDK
因此漏扫——Program Files 那支兜住的只是默认位置。
- 新增 `parse_msi_paths()`:判据是「当前键尾段叫 MSI」(不数层数),多一层/空层都认;
同键里的 `JavaHome REG_DWORD`、非 MSI 键下的 `Path`、值名不是整段 `Path` 的都不认。
- 注册表读取改为可注入:`RegSource` trait + `ProcessReg`(真 `reg.exe`),
`registry_homes_from(&dyn RegSource)` 让单测喂真实 `reg query` 输出样本,不依赖本机。
- 两个键 × 64/32 两个视图各查一遍,与 JavaSoft 那支同口径;键不存在照旧静默跳过。
- `scan_java_binaries()` 拆出 `java_binaries_in(roots, homes)`:注入式验收可以屏蔽
Program Files / PATH / JAVA_HOME,只走注册表;去重改用仓库既有的 `path_key` 口径
(末尾反斜杠、`\?\` 前缀、大小写都不会重复列)。
- 注册表这支整体搬进 `discover/registry.rs`(`mod registry;` + `pub use`,
`discover::registry_homes` / `parse_java_home` 公开路径不变,`mod.rs` 一行未动)。
2026-11-12 20:19:23 +08:00
..
2026-11-12 20:19:23 +08:00
2026-11-12 18:44:51 +08:00
2026-11-09 07:56:32 +08:00