西宁建设公司网站,魔客吧是什麼程序做的网站,安徽制作网站,杭州外贸建站electron 单个实例控制
在使用electron打包的应用程序的时候#xff0c;点击应用图标会打开多个实例#xff0c;要想控制单个实例#xff0c;需要通过 app.requestSingleInstanceLock() 判断当前程序的实例是否为当前取得锁#xff0c; 或者说#xff0c; 当前实例是否为…electron 单个实例控制
在使用electron打包的应用程序的时候点击应用图标会打开多个实例要想控制单个实例需要通过 app.requestSingleInstanceLock() 判断当前程序的实例是否为当前取得锁 或者说 当前实例是否为单一的固定实例 如果当前实例没有取到锁 返回 false,说明当前实例应该被关闭
// 阻止打开多个应用程序
const gotTheLock app.requestSingleInstanceLock();
if (!gotTheLock) {app.quit();
} else {app.on(second-instance, (event: any, commandLine: any, workingDirectory: any) {// 当运行第二个实例时,将会聚焦到myWindow这个窗口if (context.mainWindow) {// 程序被最小化的时候还原用restoreif (context.mainWindow.isMinimized()) {context.mainWindow.restore();}context.mainWindow.focus();} else {if (!context.mainWindow) {if (app.isReady()) createWindow();}}});
}
这是在网上能查出来的答案这么写也能满足基本的功能但是有缺陷假如我将程序设置到了后台隐藏起来而不是通过缩小通过app.restore()将程序唤醒后的页面没办法输入和点击会出现一个卡死的状态这点暂时不清楚为什么第二个就是app.quit()关闭程序的时候会造成页面闪一下就是程序可能 已经运行起来突然一下关闭的 针对上面两个问题做了如下的处理
对于隐藏到后台的程序通过context.mainWindow.show()和context.mainWindow.setSkipTaskbar(false);唤醒使用app.exit()代替app.quit()
electron日志输出
安装electron-log npm -i --save-dev electron-g实现logger.ts
// logger.ts
// 引入模块
import log from electron-log;// 关闭控制台打印
log.transports.console.level false
log.transports.file.level debug
log.transports.file.maxSize 10024300 // 文件最大不超过 10M
// 输出格式
log.transports.file.format [{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}
let date new Date()
let dateStr date.getFullYear() - (date.getMonth() 1) - date.getDate()
// 文件位置及命名方式
// 默认位置为C:\Users\[user]\AppData\Roaming\[appname]\electron_log\
// 文件名为年-月-日.log
// 自定义文件保存位置为安装目录下 \log\年-月-日.log
log.transports.file.resolvePath () log\\ dateStr .log;// 有六个日志级别error, warn, info, verbose, debug, silly。默认是silly
export default {info(...param:any[]) {log.info(param)},warn(...param:any[]) {log.warn(param)},error(...param:any[]) {log.error(param)},debug(...param:any[]) {log.debug(param)},verbose(...param:any[]) {log.verbose(param)},silly(...param:any[]) {log.silly(param)}
}
在background.ts中引入logger.ts
import logger from ./logger;// 调用logger方法
logger.info(xxx)日志输出位置在安装目录下的logs文件中