From 25c541e289db5c366b278f4798c22e2151a883f2 Mon Sep 17 00:00:00 2001 From: EMRG Evolution Date: Sat, 8 Aug 2026 19:54:36 +0800 Subject: [PATCH] =?UTF-8?q?emrg:=20windowless=20daemon=20spawn=20on=20Wind?= =?UTF-8?q?ows=20=E2=80=94=20pythonw.exe=20+=20windowsHide=20(rant=2019:50?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/emrgd.cmd | 6 +++++- emrg/gui/daemon_client.js | 3 +++ emrg/gui/main.js | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/emrgd.cmd b/bin/emrgd.cmd index 889f6bf6..17eb86ac 100644 --- a/bin/emrgd.cmd +++ b/bin/emrgd.cmd @@ -9,6 +9,10 @@ set PATH=%DIR%;%PREFIX%\git\cmd;%PREFIX%\git\mingw64\bin;%PATH% set PYTHONPATH=%PREFIX%\source;%PREFIX%\lib;%PYTHONPATH% set PYTHONDONTWRITEBYTECODE=1 REM R90: python.exe 复制品在 bin/,DLL 在 python-dist/ → loader 找不到 → 用 python-dist 里的 exe(与 DLL 同目录) -set PYEXE=%DIR%\python-dist\python.exe +REM 无窗口 daemon:GUI spawn 此脚本时 python.exe(console 子系统)会新开控制台黑窗; +REM 改优先用 pythonw.exe(GUI 子系统,不开窗口)。日志写 ~/.emrg/emrgd.log +REM (RotatingFileHandler),StreamHandler 仅附加,无控制台不影响日志。 +set PYEXE=%DIR%\python-dist\pythonw.exe +if not exist "%PYEXE%" set PYEXE=%DIR%\python-dist\python.exe if not exist "%PYEXE%" set PYEXE=%DIR%\python-dist\python3.13.exe "%PYEXE%" -m emrg.server %* diff --git a/emrg/gui/daemon_client.js b/emrg/gui/daemon_client.js index 7528221a..a179b4d0 100644 --- a/emrg/gui/daemon_client.js +++ b/emrg/gui/daemon_client.js @@ -121,6 +121,9 @@ class DaemonClient { cwd: this.projectDir, stdio: "ignore", // G68:对照 DEVNULL detached: true, // 对照 start_new_session=True + // windowsHide: python.exe 是 console 子系统——GUI spawn 时不隐藏会 + // 弹一个命令行黑窗(打包模式 emrgd.cmd 已改走 pythonw.exe,这里补源码模式)。 + ...(process.platform === "win32" ? { windowsHide: true } : {}), }); child.unref(); // GUI 退出不带走 daemon this._daemonChild = child; // 暴露 child(集成测试 after 清理用) diff --git a/emrg/gui/main.js b/emrg/gui/main.js index eccb50e3..e8d3c14c 100644 --- a/emrg/gui/main.js +++ b/emrg/gui/main.js @@ -155,6 +155,7 @@ vision = false const child = spawn(python, ["-c", "from emrg.config import ensure_config; ensure_config()"], { cwd: projectDir, stdio: "ignore", + ...(process.platform === "win32" ? { windowsHide: true } : {}), }); child.on("exit", () => { resolve(fs.existsSync(configPath()) ? fs.readFileSync(configPath(), "utf8") : "");