From 51d7e1870c2176220b226bfcc24bc623d6fd6b78 Mon Sep 17 00:00:00 2001 From: MarcusPy827 Date: Tue, 30 Jun 2026 03:43:21 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20APM=E6=A1=8C=E9=9D=A2=E5=BF=AB?= =?UTF-8?q?=E6=8D=B7=E6=96=B9=E5=BC=8F=E8=A1=A5=E4=B8=81=E6=94=B9=E7=94=A8?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E8=AF=BB=E5=8F=96+=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=BF=87=E6=97=A9return?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main/backend/install-manager.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/electron/main/backend/install-manager.ts b/electron/main/backend/install-manager.ts index c54e9cb9..82ffb38b 100644 --- a/electron/main/backend/install-manager.ts +++ b/electron/main/backend/install-manager.ts @@ -67,11 +67,11 @@ const APM_DESKTOP_ENTRY_DIRS = [ ]; // Helper: 用XDG_DESKTOP_DIR拿桌面路径,读不到我就回退到~/Desktop -const resolveDesktopDir = (): string => { +const resolveDesktopDir = async (): Promise => { const userDirsPath = path.join(os.homedir(), ".config", "user-dirs.dirs"); try { - const content = fs.readFileSync(userDirsPath, "utf-8"); + const content = await fsp.readFile(userDirsPath, "utf-8"); const matchRes = content.match(/^XDG_DESKTOP_DIR="\$HOME\/(.+)"$/m); if (matchRes?.[1]) { return path.join(os.homedir(), matchRes[1]); @@ -100,7 +100,7 @@ const createApmDesktopShortcut = async ( } // 解析桌面路径,确保目录存在 - const desktopDir = resolveDesktopDir(); + const desktopDir = await resolveDesktopDir(); try { await fsp.mkdir(desktopDir, { recursive: true }); } catch (err) { @@ -127,12 +127,12 @@ const createApmDesktopShortcut = async ( const srcPath = path.join(entriesPath, file); const destPath = path.join(desktopDir, file); - // 目标已存在则跳过 + // 目标已存在则跳过,继续检查下一个 try { await fsp.access(destPath); logger.debug(`Shortcut already exists: ${destPath}`); sendLog(`Shortcut already exists: ${file}`); - return; + continue; } catch { // 不存在,继续 } @@ -703,7 +703,13 @@ async function processNextInQueue() { // 安装成功后,如果是APM安装的,就调用createApmDesktopShortcut // 这个函数负责处理桌面快捷方式,它自己会读取设置并且决定要不要创建 if (task.origin === "apm" && task.pkgname) { - await createApmDesktopShortcut(task.pkgname, sendLog); + try { + await createApmDesktopShortcut(task.pkgname, sendLog); + } catch (err) { + logger.warn( + `Failed to create shortcut for ${task.pkgname}: ${err}`, + ); + } } } else { logger.error(msgObj);