Skip to content

[Bug] Windows 3.0.1 启动崩溃:scanWindowsShortcuts 在 Electron 中 Segmentation fault #592

Description

@derekxia1988

环境

  • ZTools 版本:3.0.1(全量安装包)
  • 系统:Windows 11 Pro 10.0.26200
  • Electron 版本:41.4.0
  • 特殊配置:桌面文件夹重定向到 OneDrive(C:\Users\YX\OneDrive\桌面

现象

安装 3.0.1 后无法启动,进程直接崩溃退出。

崩溃日志

启动后在 ~/.ztools/logs/main.log 中可以看到:

[Commands] 收到获取应用列表请求
[Commands] 缓存不存在,开始扫描应用...

之后进程以 Segmentation fault(exit code 139)退出,无更多日志。

根本原因定位

崩溃发生在 appMain.js 里的 scanApplications$2() 调用 WindowsShortcutScanner.scan(),最终触发 ztools_native.nodescanWindowsShortcuts(scanPaths, rootScanPaths, skipFolders)

关键发现:在 Node.js 环境中用相同参数调用 scanWindowsShortcuts 不会崩溃,但在 Electron 主进程中会 Segfault。怀疑与以下之一有关:

  1. uiohook-napi 全局键盘钩子(在崩溃前已通过 DoubleTapManager 启动)与 ztools_native.node 的 Windows API 调用之间存在冲突
  2. 桌面路径含中文(桌面)或 OneDrive 重定向路径触发 native 代码中的编码问题
  3. 3.0.1 新 native 模块在特定 Electron 上下文下有内存问题

扫描路径为:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs
C:\Users\YX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
C:\Users\YX\OneDrive\桌面        ← OneDrive 重定向桌面,含中文
C:\Users\Public\Desktop

临时 Workaround

app.asargetWindowsScanPaths() 改为返回 [],跳过快捷方式扫描:

function getWindowsScanPaths() {
  return [];
}

打补丁后 ZTools 正常启动,UWP 应用(112 个)正常,仅开始菜单 .lnk 快捷方式不显示。

复现建议

在桌面文件夹被 OneDrive 重定向(路径含中文字符)的 Windows 系统上安装 3.0.1,首次启动时必现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions