如何保证electron只启动一个实例?单实例教程
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在您高高兴兴的构建了一个electron
的exe
后,是不是发现可以多次点开?可以同时存在多个实例?那么本文就是讲述如何在electron
开发中,避免打开多个实例的。
本文的主体代码来自 http://electron.org.cn/doc/api/app.html,苏南大叔稍稍进行了修改,以适应于 quick-start
这个demo
,主要用到了app
中SingleInstance
方法,执行的是win
环境下的exe
。
在mac
环境下,本文略有不同。如果没有本文的代码,正常情况下来说,mac
下面也会是一个实例。但是在命令行下面多次启动的话,会是多个实例。
190121更新:本篇文章适合于目前
electron
所有版本,但是在electron3.x
以后有个新的函数叫做:requestSingleInstanceLock
,也可以实现类似目的。
代码展示
下面的代码来自于main.js
:
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
//...
let mainWindow
function createWindow(){
mainWindow = new BrowserWindow({width: 800, height: 600})
mainWindow.loadURL("http://electron.org.cn/")
mainWindow.on('closed', function () {
mainWindow = null
})
}
// 关键代码在这里
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
}
})
if (shouldQuit) {
app.quit()
}
// 关键代码在这里
app.on('ready', createWindow)
//...
makeSingleInstance
函数是整个功能需求的核心。大家仔细看看这里即可。代码很好理解,苏南大叔就不详细解释了。
截图展示
下面展示一下相关的效果截图,大家可以对比看看。
使用makeSingleInstance
之前的效果截图:
使用makeSingleInstance
之后的效果截图:
需要说明的是:
- 本段截图都是多次点击启动之后的截图。
- 本文中的exe都是经过
electron-packager ./
打包后的结果。 - exe在
makeSingleInstance
的作用下,即使是命令行模式electron ./
,也是只开启一个实例的。 - mac下,即使不加这段
makeSingleInstance
,也是默认只开启一个实例的。而在命令行下,是可以多次启动同一个dmg
的。加上这段makeSingleInstance
后,命令行下面,也只能启动一个。
结语
electron
启动单实例的基本目的,通过函数makeSingleInstance()
达到了。更多electron
的相关资讯,请点击苏南大叔的文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
最新的 5.0.6的文档,这个已经修改了,API完全不同,希望可以在下面继续附加一篇最新的
https://electronjs.org/docs/api/app#apprequestsingleinstancelock
有啊,https://newsn.net/say/electron-single-instance-lock.html