优化
This commit is contained in:
154
test-exit-function.js
Normal file
154
test-exit-function.js
Normal file
@@ -0,0 +1,154 @@
|
||||
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()
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user