Files
dify_market_manager_gui/test-exit-function.js
2025-07-22 17:53:26 +08:00

154 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const { app, BrowserWindow, Tray, Menu } = require('electron')
const path = require('path')
console.log('=== 退出功能测试 ===')
let mainWindow = null
let tray = null
// 单实例检查
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
console.log('❌ 检测到已有实例运行,退出当前实例')
app.quit()
} else {
console.log('✅ 这是第一个实例,继续启动')
// 监听第二个实例
app.on('second-instance', (event, commandLine, workingDirectory) => {
console.log('检测到第二个实例启动,激活现有实例')
if (mainWindow) {
if (mainWindow.isMinimized()) {
mainWindow.restore()
}
mainWindow.show()
mainWindow.focus()
}
})
// 创建窗口
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
})
mainWindow.loadURL('data:text/html,<h1>退出功能测试</h1><p>PID: ' + process.pid + '</p><p>时间: ' + new Date().toLocaleString() + '</p><p>点击托盘图标右键菜单中的"退出应用"来测试退出功能</p>')
console.log('窗口已创建PID:', process.pid)
mainWindow.on('closed', () => {
mainWindow = null
})
}
// 创建托盘
function createTray() {
tray = new Tray(path.join(__dirname, 'resources', 'icon.png'))
const contextMenu = Menu.buildFromTemplate([
{
label: '显示窗口',
click: () => {
if (mainWindow) {
mainWindow.show()
}
}
},
{
label: '隐藏窗口',
click: () => {
if (mainWindow) {
mainWindow.hide()
}
}
},
{ type: 'separator' },
{
label: '退出应用',
click: () => {
console.log('用户点击退出应用')
// 确保所有窗口都被关闭
const windows = require('electron').BrowserWindow.getAllWindows()
console.log(`准备关闭 ${windows.length} 个窗口`)
windows.forEach(window => {
if (!window.isDestroyed()) {
try {
window.destroy()
console.log('窗口销毁成功')
} catch (error) {
console.log('销毁窗口时出错:', error)
}
}
})
// 延迟执行退出,确保窗口销毁完成
setTimeout(() => {
try {
console.log('执行应用退出')
// 使用 exit 而不是 quit确保完全退出
app.exit(0)
} catch (error) {
console.log('应用退出失败,尝试强制退出:', error)
try {
process.exit(0)
} catch (processError) {
console.log('强制退出也失败:', processError)
// 最后的强制退出
process.kill(process.pid, 'SIGKILL')
}
}
}, 500)
}
}
])
tray.setContextMenu(contextMenu)
tray.setToolTip('退出功能测试')
// 点击托盘图标
tray.on('click', () => {
if (mainWindow) {
if (mainWindow.isVisible()) {
mainWindow.hide()
} else {
mainWindow.show()
}
}
})
}
app.whenReady().then(() => {
console.log('应用已准备就绪')
createWindow()
createTray()
})
app.on('window-all-closed', () => {
console.log('所有窗口已关闭')
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('before-quit', () => {
console.log('应用即将退出')
})
app.on('will-quit', () => {
console.log('应用即将退出')
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
}