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
相关产品推荐
相关产品推荐

