# 运行过程
程序的入口为 main.js
,
启动步骤的相关代码如下:
(() => {
log.info("==================== 程序开始执行");
log.info("程序开始执行: " + (Date.now() - start) + "ms");
//生成存储应用信息的目录
Utils.createAppDataDir();
//处理异常, 报错. 弹框提示错误和日志记录错误
recordException();
// 初始化Url唤醒
initUrlLaunch();
//单实例应用. 禁止多个同时运行
limitSingleApp();
// 获取是否能使用日志功能
initEnableLog();
// 初始化应用
initApp();
})();
需要重点看一下,初始化应用
中的 setAppEvent
事件。
# 生成存储应用信息的目录
- Utils.createAppDataDir();
如题:生成致信文件夹,具体请用搜索找到代码查看。
# 处理异常, 报错. 弹框提示错误和日志记录错误
- recordException()
报错捕捉,并且记录到日志中,方便进行分析。
# 初始化 Url 唤醒
- initUrlLaunch()
初始化致信穿透,比如 zhixin://xxxx123123132
// 初始化URL唤醒
function initUrlLaunch() {
log.info("初始化URL唤醒 START: " + (Date.now() - start) + "ms");
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient("zhixin", process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient("zhixin");
}
log.info("初始化URL唤醒 END: " + (Date.now() - start) + "ms");
}
# 单实例应用. 禁止多个同时运行
- initEnableLog()
防止启动多个致信程序,并且捕获通过浏览器穿透过来的 url 参数。
# 初始化应用
- initApp()
加载窗口,加载事件监听,加载各种模块等。
# 初始化浏览器设置
- setBrowserCommandLine()
设置浏览器信息,比如浏览器是否开启代理
# 改变当前应用的 AppUserModelId
- setAppUserModelId()
设置 AppUserModelId,也就是 APP 特定的 APPID
# 重要!!!!加载窗口,加载截图模块等
- setAppEvent()
具体请见 setAppEvent
# setAppEvent(主要)
AppEvent
大概分为 3 个步骤
ready
程序加载之前app.on('ready', appReady);
activate
程序加载完成,激活app.on('activate', appActivate);
before-quit
程序退出之前执行app.on('before-quit', appBeforeQuit);
# appReady
appReady
执行步骤如下
# 国际化多语言设置
initLocales();
# 复制一份 .node 文件, 供运行使用
copyNodeFile();
# 引入需要在主进程运行的模块
loadModules();
# 创建主窗口
createMainWindow();
# 创建等待页面窗口(已屏蔽)
createLoadingWindow();
# 创建图片查看器页面和视频查看器页面
setTimeout(() => {
createPreviewImgWindow();
createPreviewVideoWindow();
}, 10);
# 创建托盘
createTray();
# 监听渲染进程事件
setIpcEvents();