环境
- 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.node 的 scanWindowsShortcuts(scanPaths, rootScanPaths, skipFolders)。
关键发现:在 Node.js 环境中用相同参数调用 scanWindowsShortcuts 不会崩溃,但在 Electron 主进程中会 Segfault。怀疑与以下之一有关:
uiohook-napi 全局键盘钩子(在崩溃前已通过 DoubleTapManager 启动)与 ztools_native.node 的 Windows API 调用之间存在冲突
- 桌面路径含中文(
桌面)或 OneDrive 重定向路径触发 native 代码中的编码问题
- 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.asar 中 getWindowsScanPaths() 改为返回 [],跳过快捷方式扫描:
function getWindowsScanPaths() {
return [];
}
打补丁后 ZTools 正常启动,UWP 应用(112 个)正常,仅开始菜单 .lnk 快捷方式不显示。
复现建议
在桌面文件夹被 OneDrive 重定向(路径含中文字符)的 Windows 系统上安装 3.0.1,首次启动时必现。
环境
C:\Users\YX\OneDrive\桌面)现象
安装 3.0.1 后无法启动,进程直接崩溃退出。
崩溃日志
启动后在
~/.ztools/logs/main.log中可以看到:之后进程以 Segmentation fault(exit code 139)退出,无更多日志。
根本原因定位
崩溃发生在
appMain.js里的scanApplications$2()调用WindowsShortcutScanner.scan(),最终触发ztools_native.node的scanWindowsShortcuts(scanPaths, rootScanPaths, skipFolders)。关键发现:在 Node.js 环境中用相同参数调用
scanWindowsShortcuts不会崩溃,但在 Electron 主进程中会 Segfault。怀疑与以下之一有关:uiohook-napi全局键盘钩子(在崩溃前已通过DoubleTapManager启动)与ztools_native.node的 Windows API 调用之间存在冲突桌面)或 OneDrive 重定向路径触发 native 代码中的编码问题扫描路径为:
临时 Workaround
将
app.asar中getWindowsScanPaths()改为返回[],跳过快捷方式扫描:打补丁后 ZTools 正常启动,UWP 应用(112 个)正常,仅开始菜单
.lnk快捷方式不显示。复现建议
在桌面文件夹被 OneDrive 重定向(路径含中文字符)的 Windows 系统上安装 3.0.1,首次启动时必现。