electron 如何实现单实例?两种方案解决单实例问题
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在electron
的开发过程中,单实例的需求一直都存在。以前在electron2.x
时代,有个解决函数叫做:makeSingleInstance
。在electron3.x
甚至electron4.x
时代,出现了一个新的函数叫做:requestSingleInstanceLock
。本文讲述的就是这两个函数的基本使用范例的。
本文测试环境:mac
。
方案一:通用的makeSingleInstance
无论electron
版本高低,此函数一律通用,下面的是使用范例:
主进程代码:
let mainWindow
//...
function createWindow () {
//...
}
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
}
})
if (shouldQuit) {
app.quit()
}
app.on('ready', createWindow)
具体的函数说明见这里:
方案二:3.x
及以上专用requestSingleInstanceLock
此方法使应用程序成为单个实例应用程序, 而不是允许应用程序的多个实例运行, 这将确保只有一个应用程序的实例正在运行, 其余的实例全部会被终止并退出。
requestSingleInstanceLock
这个函数是在electron@3.x
系列中,添加的新函数。理论上来说,3.x
系列及以后版本,应该都支持这个函数。其使用范例如下:
newsn.net:这里是【评论】可见内容
这个函数,有两个相关函数分别是:
查询单实例锁状态:
app.hasSingleInstanceLock()
释放单实例锁:
app.releaseSingleInstanceLock()
如果你的程序是应用的主要实例并且当这个方法返回true
时,你应该继续让你的程序运行。 如果当它返回false
如果你的程序没有取得锁,它应该立刻退出,并且将参数发送给那个已经取到锁的进程。
这些函数是electron@3.0
系列专属函数,2.0
系统中会报错。
app.requestSingleInstanceLock is not a function
总结
electron3.x
系列增加了很多新的函数,这个也是其中的一条新函数吧。使用起来是比较简单的,所以,没有特别的好说明的地方,大家抄袭下使用范例即可。唯一需要注意的是:这两个例子之中,app.on('ready', createWindow)
的时机和位置。
下面是electron
的系列文章的经验汇总,苏南大叔再一次推荐给大家:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
66666
1
谢谢
谢谢~
66666
这方法好,我说使用第一个怎么出错,报未定义呢,原来是版本中换名称了。
123
学习
electron 在resize为false时,窗口四周有5px无法响应鼠标事件怎么破?
666666666
electron7.0 有更方便的方法吗
大萨达撒多
66
怎么说
666
11111111111
111111222222
问个问题,让electron使用activex控件(或者把exe界面调去成页面内部显示的一部分)
我觉得mfc,可能会更适合你...
electron 如何实现单实例?两种方案解决单实例问题