diff --git a/app/electron/main.js b/app/electron/main.js index e095d36c1..442af3d80 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -551,55 +551,59 @@ const initKernel = (initData) => { } let cmd = `ui version [${appVer}], booting kernel [${kernelPath} ${cmds.join(' ')}]` writeLog(cmd) - const cp = require('child_process') - const kernelProcess = cp.spawn(kernelPath, - cmds, { - detached: false, // 桌面端内核进程不再以游离模式拉起 https://github.com/siyuan-note/siyuan/issues/6336 - stdio: 'ignore', - }, - ) - writeLog('booted kernel process [pid=' + kernelProcess.pid + ']') + let kernelProcessPid = "" + if (!isDevEnv) { + const cp = require('child_process') + const kernelProcess = cp.spawn(kernelPath, + cmds, { + detached: false, // 桌面端内核进程不再以游离模式拉起 https://github.com/siyuan-note/siyuan/issues/6336 + stdio: 'ignore', + }, + ) + kernelProcessPid = kernelProcess.pid + writeLog('booted kernel process [pid=' + kernelProcessPid + ']') - kernelProcess.on('close', (code) => { - if (0 !== code) { - writeLog(`kernel exited with code [${code}]`) - switch (code) { - case 20: - showErrorWindow('⚠️ 数据库被锁定 The database is locked', - `
数据库文件正在被其他程序锁定。如果你使用了第三方同步盘,请在思源运行期间关闭同步。
The database file is being locked by another program. If you use a third-party sync disk, please turn off sync while SiYuan is running.
`) - break - case 21: - showErrorWindow('⚠️ ' + kernelPort + ' 端口不可用 The port ' + kernelPort + ' is unavailable', - '
思源需要监听 ' + kernelPort + ' 端口,请确保该端口可用且不是其他程序的保留端口。可尝试使用管理员运行命令:' + - '
net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat
' + - '
SiYuan needs to listen to port ' + kernelPort + ', please make sure this port is available, and not a reserved port by other software. Try running the command as an administrator: ' + - '
net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat
') - break - case 22: - showErrorWindow( - '⚠️ 创建配置目录失败 Failed to create config directory', - `
思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。
SiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.
`) - break - case 23: - showErrorWindow( - '⚠️ 无法读写块树文件 Failed to access blocktree file', - `
块树文件正在被其他程序锁定或者已经损坏,请删除 工作空间/temp/ 文件夹后重启
The block tree file is being locked by another program or is corrupted, please delete the workspace/temp/ folder and restart.
`) - break - case 0: - case 1: // Fatal error - break - default: - showErrorWindow( - '⚠️ 内核因未知原因退出 The kernel exited for unknown reasons', - `
思源内核因未知原因退出 [code=${code}],请尝试重启操作系统后再启动思源。如果该问题依然发生,请检查杀毒软件是否阻止思源内核启动。
+ kernelProcess.on('close', (code) => { + if (0 !== code) { + writeLog(`kernel exited with code [${code}]`) + switch (code) { + case 20: + showErrorWindow('⚠️ 数据库被锁定 The database is locked', + `
数据库文件正在被其他程序锁定。如果你使用了第三方同步盘,请在思源运行期间关闭同步。
The database file is being locked by another program. If you use a third-party sync disk, please turn off sync while SiYuan is running.
`) + break + case 21: + showErrorWindow('⚠️ ' + kernelPort + ' 端口不可用 The port ' + kernelPort + ' is unavailable', + '
思源需要监听 ' + kernelPort + ' 端口,请确保该端口可用且不是其他程序的保留端口。可尝试使用管理员运行命令:' + + '
net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat
' + + '
SiYuan needs to listen to port ' + kernelPort + ', please make sure this port is available, and not a reserved port by other software. Try running the command as an administrator: ' + + '
net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat
') + break + case 22: + showErrorWindow( + '⚠️ 创建配置目录失败 Failed to create config directory', + `
思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。
SiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.
`) + break + case 23: + showErrorWindow( + '⚠️ 无法读写块树文件 Failed to access blocktree file', + `
块树文件正在被其他程序锁定或者已经损坏,请删除 工作空间/temp/ 文件夹后重启
The block tree file is being locked by another program or is corrupted, please delete the workspace/temp/ folder and restart.
`) + break + case 0: + case 1: // Fatal error + break + default: + showErrorWindow( + '⚠️ 内核因未知原因退出 The kernel exited for unknown reasons', + `
思源内核因未知原因退出 [code=${code}],请尝试重启操作系统后再启动思源。如果该问题依然发生,请检查杀毒软件是否阻止思源内核启动。
SiYuan Kernel exited for unknown reasons [code=${code}], please try to reboot your operating system and then start SiYuan again. If occurs this problem still, please check your anti-virus software whether kill the SiYuan Kernel.
`) - break - } + break + } - bootWindow.destroy() - resolve(false) - } - }) + bootWindow.destroy() + resolve(false) + } + }) + } const sleep = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)) @@ -616,7 +620,7 @@ const initKernel = (initData) => { while (!gotPort) { try { const portJSON = JSON.parse(fs.readFileSync(portJSONPath, 'utf8')) - const ret = portJSON[kernelProcess.pid.toString()] + const ret = portJSON[kernelProcessPid] if (ret) { gotPort = true return ret @@ -627,7 +631,7 @@ const initKernel = (initData) => { } finally { count++ if (64 < count) { - writeLog('get kernel port failed [pid=' + kernelProcess.pid + ']') + writeLog('get kernel port failed [pid=' + kernelProcessPid + ']') bootWindow.destroy() resolve(false) } @@ -812,6 +816,7 @@ app.on('before-quit', (event) => { }) const {powerMonitor} = require('electron') +const cp = require("child_process"); powerMonitor.on('suspend', () => { writeLog('system suspend')