You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron Forge Squirrel安装程序启动后卡顿问题求助

问题:Electron Forge + Squirrel 安装时启动后台Python服务但无法提前结束安装流程

我用Electron Forge构建应用,需要在安装时启动一个永久运行的后台服务器,同时希望安装流程在服务器进程启动完成前就结束。目前使用Squirrel打包Windows安装程序,后端进程通过pythonw在后台运行——由于该进程需要用户权限,无法通过Windows服务(sc)实现。


现有实现代码

run-server.bat

set PYTHONPATH=%PYTHONPATH%; %LocalAppData%\my-app\app-0.9.7\resources\app\src\python\Lib\site-packages
set PYTHONHOME=%LocalAppData%\my-app\app-0.9.7\resources\app\src\python
start "" "%LocalAppData%\my-app\app-0.9.7\resources\app\src\python\pythonw.exe" "%LocalAppData%\my-app\app-0.9.7\resources\app\src\py\server.py" "%1"
exit

windows-setup.bat

copy "%LocalAppData%\my-app\app-0.9.7\resources\app\installers\run-server.bat" "%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\run-server.bat"
start "" "%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\run-server.bat"

setupEvents.js

case '--squirrel-install':
    async function setup() {
      const setup_windows = spawn('cmd.exe', 
      ['/c', '%LocalAppData%/my-app/app-0.9.7/resources/app/installers/windows-setup.bat'], {
         detached: true,
         stdio: 'ignore'
      }).unref();
      setup_windows.stdout.on('data', (data) => {
         log.info(`bat stdout: ${data}`);
      });
      setup_windows.stderr.on('data', (data) => {
         log.error(`dir stderr: ${data}`);
      });
    }
    setup();
    
    spawnUpdate(['--createShortcut', exeName]);

    setTimeout(app.quit, 1000);
    return true;

已尝试的解决方案

  • 给spawn生成的进程添加.unref()
  • 设置进程选项detached: true
  • 在run-server.bat的start命令中添加/B参数
  • 尝试用sc将服务器注册为Windows进程

日志显示--squirrel-install已执行,但上述方法均未解决问题。

内容的提问来源于stack exchange,提问作者keckothedragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:24:56