|
|
发表于 2026-9-8 23:38:45
|
显示全部楼层
最可能是安装器的“同名进程误判”,不是红豆主窗口真的仍在运行。
旧版代码证据显示,Windows 安装器启动时直接调用 NSIS 的 `nsProcess::FindProcess hongdou.exe`:只按进程文件名查找,不核对安装路径、PID、签名或是否锁定当前安装目录。[installer.nsi](/Users/aegean/.hermes/attachments/红豆审计/zotero-client-hongdou-to900/app/win/installer/installer.nsi:975);主程序名硬编码为 `hongdou.exe`。[defines.nsi](/Users/aegean/.hermes/attachments/红豆审计/zotero-client-hongdou-to900/app/win/installer/defines.nsi:18)
因此,可能原因按优先级是:
1. 另一个 `hongdou.exe` 仍在运行:旧版、便携版、另一个安装目录、副本,或其他用户/管理员会话中的进程。安装器会一概拦截。
2. 新版本仍沿用这段 NSIS 检测,但 `nsProcess` 插件在特定权限、会话或安全软件环境下误报。
3. 自动更新器、崩溃恢复器或启动项在重启后又短暂拉起了 `hongdou.exe`;普通“进程”页搜索未必能看到跨会话/受保护进程。
4. 若新版安装器已改造,则可能是其“运行检测”返回值被错误映射为“正在运行”;重启后仍稳定复现更支持安装器检测缺陷,而非普通残留进程。
建议让用户在“重启后、不要打开红豆、立刻运行安装包前”以管理员 PowerShell 执行:
```powershell
Get-CimInstance Win32_Process -Filter "Name='hongdou.exe'" |
Select-Object ProcessId, ParentProcessId, ExecutablePath, CommandLine
```
- 若有结果:确认 `ExecutablePath` 是否属于红豆实际安装目录;仅在确认后结束该 PID,再安装。
- 若无结果:基本可判定为安装器误报。不要让用户删除 AppData、数据库或文献目录;这和进程检测无直接关系,风险很高。
研发应这样修:
- 禁止仅按 `hongdou.exe` 文件名拦截。
- 改用 Windows Restart Manager,针对目标安装目录内的实际文件检查锁定者。
- 或枚举 PID 后核对完整可执行路径、当前用户/会话、产品签名;不同目录的同名进程不得阻断安装。
- 报错框必须显示:检测方式、PID、完整路径、进程所属用户;没有这些证据时不要说“红豆正在运行”。
- 对“检测异常/无 PID”单列为“无法确认进程状态”,允许用户导出诊断并安全退出,而非伪报运行中。
- 新增回归:无 `hongdou.exe`、其他目录同名、其他用户会话、权限拒绝、更新器短暂子进程、真实安装目录锁定等场景。
由于用户使用的是比审计代码更新的版本,上述源码不能证明新版仍是同一实现;但它明确表明旧安装器存在“按文件名粗粒度检测”的高风险设计,应该优先核查新版是否继承了这段逻辑。 |
|