mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 16:10:12 +01:00
🎨 桌面端内核进程使用随机端口 https://github.com/siyuan-note/siyuan/issues/4952
This commit is contained in:
parent
ffc35d8573
commit
2832c40687
1 changed files with 53 additions and 48 deletions
|
|
@ -551,55 +551,59 @@ const initKernel = (initData) => {
|
||||||
}
|
}
|
||||||
let cmd = `ui version [${appVer}], booting kernel [${kernelPath} ${cmds.join(' ')}]`
|
let cmd = `ui version [${appVer}], booting kernel [${kernelPath} ${cmds.join(' ')}]`
|
||||||
writeLog(cmd)
|
writeLog(cmd)
|
||||||
const cp = require('child_process')
|
let kernelProcessPid = ""
|
||||||
const kernelProcess = cp.spawn(kernelPath,
|
if (!isDevEnv) {
|
||||||
cmds, {
|
const cp = require('child_process')
|
||||||
detached: false, // 桌面端内核进程不再以游离模式拉起 https://github.com/siyuan-note/siyuan/issues/6336
|
const kernelProcess = cp.spawn(kernelPath,
|
||||||
stdio: 'ignore',
|
cmds, {
|
||||||
},
|
detached: false, // 桌面端内核进程不再以游离模式拉起 https://github.com/siyuan-note/siyuan/issues/6336
|
||||||
)
|
stdio: 'ignore',
|
||||||
writeLog('booted kernel process [pid=' + kernelProcess.pid + ']')
|
},
|
||||||
|
)
|
||||||
|
kernelProcessPid = kernelProcess.pid
|
||||||
|
writeLog('booted kernel process [pid=' + kernelProcessPid + ']')
|
||||||
|
|
||||||
kernelProcess.on('close', (code) => {
|
kernelProcess.on('close', (code) => {
|
||||||
if (0 !== code) {
|
if (0 !== code) {
|
||||||
writeLog(`kernel exited with code [${code}]`)
|
writeLog(`kernel exited with code [${code}]`)
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case 20:
|
case 20:
|
||||||
showErrorWindow('⚠️ 数据库被锁定 The database is locked',
|
showErrorWindow('⚠️ 数据库被锁定 The database is locked',
|
||||||
`<div>数据库文件正在被其他程序锁定。如果你使用了第三方同步盘,请在思源运行期间关闭同步。</div><div>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.</div>`)
|
`<div>数据库文件正在被其他程序锁定。如果你使用了第三方同步盘,请在思源运行期间关闭同步。</div><div>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.</div>`)
|
||||||
break
|
break
|
||||||
case 21:
|
case 21:
|
||||||
showErrorWindow('⚠️ ' + kernelPort + ' 端口不可用 The port ' + kernelPort + ' is unavailable',
|
showErrorWindow('⚠️ ' + kernelPort + ' 端口不可用 The port ' + kernelPort + ' is unavailable',
|
||||||
'<div>思源需要监听 ' + kernelPort + ' 端口,请确保该端口可用且不是其他程序的保留端口。可尝试使用管理员运行命令:' +
|
'<div>思源需要监听 ' + kernelPort + ' 端口,请确保该端口可用且不是其他程序的保留端口。可尝试使用管理员运行命令:' +
|
||||||
'<pre><code>net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat</code></pre></div>' +
|
'<pre><code>net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat</code></pre></div>' +
|
||||||
'<div>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: ' +
|
'<div>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: ' +
|
||||||
'<pre><code>net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat</code></pre></div>')
|
'<pre><code>net stop winnat\nnetsh interface ipv4 add excludedportrange protocol=tcp startport=' + kernelPort + ' numberofports=1\nnet start winnat</code></pre></div>')
|
||||||
break
|
break
|
||||||
case 22:
|
case 22:
|
||||||
showErrorWindow(
|
showErrorWindow(
|
||||||
'⚠️ 创建配置目录失败 Failed to create config directory',
|
'⚠️ 创建配置目录失败 Failed to create config directory',
|
||||||
`<div>思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。</div><div>SiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.</div>`)
|
`<div>思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。</div><div>SiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.</div>`)
|
||||||
break
|
break
|
||||||
case 23:
|
case 23:
|
||||||
showErrorWindow(
|
showErrorWindow(
|
||||||
'⚠️ 无法读写块树文件 Failed to access blocktree file',
|
'⚠️ 无法读写块树文件 Failed to access blocktree file',
|
||||||
`<div>块树文件正在被其他程序锁定或者已经损坏,请删除 工作空间/temp/ 文件夹后重启</div><div>The block tree file is being locked by another program or is corrupted, please delete the workspace/temp/ folder and restart.</div>`)
|
`<div>块树文件正在被其他程序锁定或者已经损坏,请删除 工作空间/temp/ 文件夹后重启</div><div>The block tree file is being locked by another program or is corrupted, please delete the workspace/temp/ folder and restart.</div>`)
|
||||||
break
|
break
|
||||||
case 0:
|
case 0:
|
||||||
case 1: // Fatal error
|
case 1: // Fatal error
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
showErrorWindow(
|
showErrorWindow(
|
||||||
'⚠️ 内核因未知原因退出 The kernel exited for unknown reasons',
|
'⚠️ 内核因未知原因退出 The kernel exited for unknown reasons',
|
||||||
`<div>思源内核因未知原因退出 [code=${code}],请尝试重启操作系统后再启动思源。如果该问题依然发生,请检查杀毒软件是否阻止思源内核启动。</div>
|
`<div>思源内核因未知原因退出 [code=${code}],请尝试重启操作系统后再启动思源。如果该问题依然发生,请检查杀毒软件是否阻止思源内核启动。</div>
|
||||||
<div>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.</div>`)
|
<div>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.</div>`)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
bootWindow.destroy()
|
bootWindow.destroy()
|
||||||
resolve(false)
|
resolve(false)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const sleep = (ms) => {
|
const sleep = (ms) => {
|
||||||
return new Promise(resolve => setTimeout(resolve, ms))
|
return new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
|
@ -616,7 +620,7 @@ const initKernel = (initData) => {
|
||||||
while (!gotPort) {
|
while (!gotPort) {
|
||||||
try {
|
try {
|
||||||
const portJSON = JSON.parse(fs.readFileSync(portJSONPath, 'utf8'))
|
const portJSON = JSON.parse(fs.readFileSync(portJSONPath, 'utf8'))
|
||||||
const ret = portJSON[kernelProcess.pid.toString()]
|
const ret = portJSON[kernelProcessPid]
|
||||||
if (ret) {
|
if (ret) {
|
||||||
gotPort = true
|
gotPort = true
|
||||||
return ret
|
return ret
|
||||||
|
|
@ -627,7 +631,7 @@ const initKernel = (initData) => {
|
||||||
} finally {
|
} finally {
|
||||||
count++
|
count++
|
||||||
if (64 < count) {
|
if (64 < count) {
|
||||||
writeLog('get kernel port failed [pid=' + kernelProcess.pid + ']')
|
writeLog('get kernel port failed [pid=' + kernelProcessPid + ']')
|
||||||
bootWindow.destroy()
|
bootWindow.destroy()
|
||||||
resolve(false)
|
resolve(false)
|
||||||
}
|
}
|
||||||
|
|
@ -812,6 +816,7 @@ app.on('before-quit', (event) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const {powerMonitor} = require('electron')
|
const {powerMonitor} = require('electron')
|
||||||
|
const cp = require("child_process");
|
||||||
|
|
||||||
powerMonitor.on('suspend', () => {
|
powerMonitor.on('suspend', () => {
|
||||||
writeLog('system suspend')
|
writeLog('system suspend')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue