优化
This commit is contained in:
@@ -109,10 +109,7 @@ logger.info(app.getPath('userData'))
|
||||
logger.info('应用启动,日志文件路径:', logger.getLogPath())
|
||||
|
||||
// 添加更多启动信息
|
||||
logger.info('开始检查单实例锁...')
|
||||
|
||||
// 创建单实例管理器
|
||||
const singleInstanceManager = new SingleInstanceManager()
|
||||
logger.info('开始初始化应用...')
|
||||
|
||||
// 清理缓存目录
|
||||
function cleanupCacheDirectories() {
|
||||
@@ -166,43 +163,25 @@ function cleanupCacheDirectories() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 单应用启动实现
|
||||
* 请求单一实例锁,
|
||||
* 如果该方法返回`false`,
|
||||
* 则表示已经有一个实例在运行,
|
||||
* 可以通过`app.quit()`方法退出当前实例。
|
||||
*/
|
||||
const gotTheLock = app.requestSingleInstanceLock()
|
||||
|
||||
|
||||
// 检查是否为第一个实例
|
||||
const isFirstInstance = singleInstanceManager.checkSingleInstance()
|
||||
|
||||
if (!isFirstInstance) {
|
||||
logger.info('检测到已有实例运行,尝试激活现有实例')
|
||||
|
||||
// 尝试激活第一个实例的窗口
|
||||
try {
|
||||
const windows = BrowserWindow.getAllWindows()
|
||||
if (windows.length > 0) {
|
||||
const mainWindow = windows[0]
|
||||
if (mainWindow.isMinimized()) {
|
||||
mainWindow.restore()
|
||||
}
|
||||
mainWindow.show()
|
||||
mainWindow.focus()
|
||||
logger.info('成功激活现有实例窗口')
|
||||
app.quit() // 退出当前实例
|
||||
} else {
|
||||
logger.warn('未找到现有实例窗口,可能是锁未正确释放')
|
||||
logger.info('强制退出当前实例,避免重复托盘')
|
||||
app.quit() // 强制退出,避免创建重复托盘
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error('激活现有实例失败:', error)
|
||||
logger.info('强制退出当前实例,避免重复托盘')
|
||||
app.quit() // 强制退出,避免创建重复托盘
|
||||
}
|
||||
if (!gotTheLock) {
|
||||
logger.info('检测到已有实例运行,退出当前实例')
|
||||
app.quit()
|
||||
} else {
|
||||
logger.info('这是第一个实例,继续启动')
|
||||
// 这是第一个实例
|
||||
|
||||
// 监听第二个实例的启动
|
||||
// 监听第二个实例被运行时
|
||||
app.on('second-instance', (event, commandLine, workingDirectory) => {
|
||||
// 当运行第二个实例时,将显示第一个实例的窗口
|
||||
logger.info('检测到第二个实例启动,激活现有实例')
|
||||
// 当有第二个实例被运行时,激活之前的实例并将焦点置于其窗口
|
||||
const windows = BrowserWindow.getAllWindows()
|
||||
if (windows.length > 0) {
|
||||
const mainWindow = windows[0]
|
||||
@@ -228,7 +207,7 @@ if (!isFirstInstance) {
|
||||
callback(true);
|
||||
});
|
||||
|
||||
electronApp.setAppUserModelId('com.electron')
|
||||
electronApp.setAppUserModelId('com.huashiai.dify-market-manager-gui')
|
||||
|
||||
app.on('browser-window-created', (_, window) => {
|
||||
optimizer.watchWindowShortcuts(window)
|
||||
@@ -281,7 +260,7 @@ if (!isFirstInstance) {
|
||||
}
|
||||
|
||||
if (!app.isQuiting) {
|
||||
|
||||
logger.info('用户关闭窗口,隐藏应用')
|
||||
// 如果不是主动退出,则隐藏所有窗口
|
||||
BrowserWindow.getAllWindows().forEach(window => {
|
||||
window.hide()
|
||||
@@ -299,9 +278,11 @@ if (!isFirstInstance) {
|
||||
app.quit();
|
||||
|
||||
} else {
|
||||
logger.info('主动退出,完全关闭应用')
|
||||
// 如果是主动退出,则销毁托盘并退出应用
|
||||
destroyTray()
|
||||
app.quit()
|
||||
// 使用 exit 确保完全退出
|
||||
app.exit(0)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -313,6 +294,7 @@ if (!isFirstInstance) {
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info('应用即将退出,开始清理资源')
|
||||
// 在应用程序即将退出时执行操作,例如保存数据
|
||||
event.preventDefault();
|
||||
|
||||
@@ -325,7 +307,8 @@ if (!isFirstInstance) {
|
||||
|
||||
// 销毁托盘并退出应用
|
||||
destroyTray()
|
||||
app.quit();
|
||||
// 使用 exit 确保完全退出
|
||||
app.exit(0);
|
||||
});
|
||||
|
||||
// 在应用退出时注销所有快捷键
|
||||
@@ -336,6 +319,7 @@ if (!isFirstInstance) {
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info('应用即将退出,注销快捷键')
|
||||
event.preventDefault();
|
||||
|
||||
// 清除所有会话数据
|
||||
@@ -348,12 +332,10 @@ if (!isFirstInstance) {
|
||||
unregisterAllShortcuts()
|
||||
destroyTray()
|
||||
|
||||
// 清理完成后退出应用
|
||||
app.quit();
|
||||
// 清理完成后退出应用,使用 exit 确保完全退出
|
||||
app.exit(0);
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 监听进程退出信号,确保在系统强制关闭时也能清理缓存
|
||||
process.on('SIGTERM', async () => {
|
||||
logger.info('收到 SIGTERM 信号,开始清理缓存');
|
||||
@@ -389,11 +371,8 @@ if (!isFirstInstance) {
|
||||
// 不要立即退出,给应用一个恢复的机会
|
||||
logger.error('应用遇到未处理的 Promise 拒绝,但将继续运行');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
export function checkIsKeepAlive(){
|
||||
|
||||
const checkIsKeepAliveTimer=setInterval(async () => {
|
||||
|
||||
Reference in New Issue
Block a user