From 52f998029552aecd2da4b74677b1fd52921b7117 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Mon, 2 Sep 2024 10:25:50 +0800 Subject: [PATCH] fix dns for macos --- changelog.md | 3 +-- src/main/core/manager.ts | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/changelog.md b/changelog.md index 21f6013..e941eb7 100644 --- a/changelog.md +++ b/changelog.md @@ -10,5 +10,4 @@ ### Bug Fixes -- 修复更新内核后内核无法正常关闭的问题 -- 优化规则/代理页面性能 +- 修复某些MacOS DNS设置失败的问题 diff --git a/src/main/core/manager.ts b/src/main/core/manager.ts index 8d7e6f5..7070816 100644 --- a/src/main/core/manager.ts +++ b/src/main/core/manager.ts @@ -44,7 +44,13 @@ export async function startCore(): Promise { await checkProfile() await stopCore() if (tun?.enable && autoSetDNS) { - await setPublicDNS() + try { + await setPublicDNS() + } catch (error) { + await writeFile(logPath(), `[Manager]: set dns failed, ${error}`, { + flag: 'a' + }) + } } child = spawn(corePath, ['-d', mihomoWorkDir()]) child.on('close', async (code, signal) => { @@ -93,7 +99,9 @@ export async function stopCore(force = false): Promise { await recoverDNS() } } catch (error) { - // todo + await writeFile(logPath(), `[Manager]: recover dns failed, ${error}`, { + flag: 'a' + }) } if (child) { @@ -202,7 +210,7 @@ async function getOriginDNS(password?: string): Promise { let sudo = '' if (password) sudo = `echo "${password}" | sudo -S ` const service = await getDefaultService(password) - const { stdout: dns } = await execPromise(`${sudo}networksetup -getdnsservers ${service}`) + const { stdout: dns } = await execPromise(`${sudo}networksetup -getdnsservers "${service}"`) if (dns.startsWith("There aren't any DNS Servers set on")) { await patchAppConfig({ originDNS: 'Empty' }) } else { @@ -215,8 +223,7 @@ async function setDNS(dns: string, password?: string): Promise { let sudo = '' if (password) sudo = `echo "${password}" | sudo -S ` const execPromise = promisify(exec) - await execPromise(`${sudo}networksetup -setdnsservers ${service} ${dns}`) - // todo + await execPromise(`${sudo}networksetup -setdnsservers "${service}" ${dns}`) } async function setPublicDNS(): Promise {