通过app.requestSingleInstanceLock来控制应用的多开,返回值为boolean。
此方法的返回值表示你的应用程序实例是否成功取得了锁。如果它取得锁失败,你可以假设另一个应用实例已经取得了锁并且仍旧在运行,并立即退出。
即:如果当前进程是应用程序的主要实例,则此方法返回true,同时你的应用会继续运行。如果当它返回false,如果你的程序没有取得锁,它应该立刻退出,并且将参数发送给那个已经取到锁的进程。
在macOS上,当用户尝试在Finder打开您的应用程序的第二个实例时,系统会通过发出open-file和open-url事件来自动强制执行单个实例,但是当用户在命令行启动应用程序时,系统的单实例机制将被绕过,您必须手动调用此方法来确保单实例。
在第二个实例启动事激活主实例窗口的示例:
const {app} = require('electron')
let myWindow = null
const additionalData = {myKey:'myValue'}
const gotTheLock = app.requestSingleInstanceLock(additionalData)
if(!gotTheLock){
app.quit()
}else{
app.on('second-instance',(event,commandLine,workingDirectory,additionalData)=>{
//输入从第二个实例中接收到的数据
console.log(additionalData)
//有人试图运行第二个实例,我们应该关注我们的窗口
if(myWindow){
if(myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
//创建myWindow,加载应用的其余部分,etc...
app.whenReady().then(()=>{
myWindow = createWindow()
})
}