From 6cf67828a27cc7e1ef8ba9da0347d6caa9cd9183 Mon Sep 17 00:00:00 2001 From: cc <98377878+hicccc77@users.noreply.github.com> Date: Sat, 25 Apr 2026 15:50:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLinux=E5=AF=86=E9=92=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/services/keyServiceLinux.ts | 52 +++++++++++++++++----- resources/key/linux/x64/xkey_helper_linux | Bin 179512 -> 179512 bytes 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/electron/services/keyServiceLinux.ts b/electron/services/keyServiceLinux.ts index 249431b..b67a73b 100644 --- a/electron/services/keyServiceLinux.ts +++ b/electron/services/keyServiceLinux.ts @@ -167,7 +167,7 @@ export class KeyServiceLinux { await new Promise(r => setTimeout(r, 2000)) - return await this.getDbKey(pid, onStatus) + return await this.getDbKey(pid, onStatus, timeoutMs) } catch (err: any) { console.error('[Debug] 自动获取流程彻底崩溃:', err); const errMsg = '自动获取微信 PID 失败: ' + err.message @@ -176,7 +176,7 @@ export class KeyServiceLinux { } } - public async getDbKey(pid: number, onStatus?: (message: string, level: number) => void): Promise { + public async getDbKey(pid: number, onStatus?: (message: string, level: number) => void, timeoutMs = 180_000): Promise { try { const helperPath = this.getHelperPath() @@ -200,28 +200,56 @@ export class KeyServiceLinux { } return await new Promise((resolve) => { - const options = { name: 'WeFlow' } - const command = `"${helperPath}" db_hook ${pid} ${targetAddr}` + const options = { + name: 'WeFlow', + env: { + PATH: `${process.env.PATH || ''}:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin` + } + } + const timeoutSec = Math.ceil((timeoutMs + 15_000) / 1000) + const command = `timeout -k 5s ${timeoutSec}s "${helperPath}" db_hook ${pid} ${targetAddr} ${timeoutMs}` + let settled = false + const finish = (result: DbKeyResult) => { + if (settled) return + settled = true + clearTimeout(watchdog) + resolve(result) + } + const watchdog = setTimeout(() => { + execAsync(`kill -CONT ${pid}`).catch(() => {}) + const err = `Hook 等待超时(${Math.round(timeoutMs / 1000)} 秒)。请确认微信登录确认已完成,或重启微信后重试。` + onStatus?.(err, 2) + finish({ success: false, error: err }) + }, timeoutMs + 30_000) - this.sudo.exec(command, options, (error, stdout) => { + onStatus?.('授权通过后请在手机上确认登录微信,正在等待密钥回调...', 0) + + this.sudo.exec(command, options, (error, stdout, stderr) => { execAsync(`kill -CONT ${pid}`).catch(() => {}) if (error) { - onStatus?.('授权失败或被取消', 2) - resolve({ success: false, error: `授权失败或被取消: ${error.message}` }) + const detail = String(stderr || '').trim() + const message = detail ? `${error.message}: ${detail}` : error.message + onStatus?.('授权失败或 Hook 执行失败', 2) + finish({ success: false, error: `授权失败或 Hook 执行失败: ${message}` }) return } try { - const hookRes = JSON.parse((stdout as string).trim()) + const output = String(stdout || '').trim() + if (!output) { + const detail = String(stderr || '').trim() + throw new Error(detail ? `Hook 无输出: ${detail}` : 'Hook 无输出') + } + const hookRes = JSON.parse(output) if (hookRes.success) { onStatus?.('密钥获取成功', 1) - resolve({ success: true, key: hookRes.key }) + finish({ success: true, key: hookRes.key }) } else { onStatus?.(hookRes.result, 2) - resolve({ success: false, error: hookRes.result }) + finish({ success: false, error: hookRes.result }) } - } catch (e) { + } catch (e: any) { onStatus?.('解析 Hook 结果失败', 2) - resolve({ success: false, error: '解析 Hook 结果失败' }) + finish({ success: false, error: e?.message || '解析 Hook 结果失败' }) } }) }) diff --git a/resources/key/linux/x64/xkey_helper_linux b/resources/key/linux/x64/xkey_helper_linux index 8deb6d4e2516fd3840ddc3979d41d9e1a5291b86..8b3cd18f9d88108ea01a645e483e6e4aa2e30b56 100755 GIT binary patch delta 20458 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 delta 20442 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