需要注意的是,虽然以上目录内的文件都是加密存储的,但你只要把这个目录下的文件拷贝到另一台机器上,就可以用一个伪造的 Electron 程序读取到这些缓存文件内的数据 。
另外,我们前面章节介绍的客户端数据库文件也是存放在这个目录下的 。
Electron 为我们提供了一个便捷的 API 来获取此路径,此方法执行时会判断当前应用正运行在什么操作系统上,然后根据操作系统的名称返回具体的路径地址 。
app.getPath("userData");
注册表键值如果开发者使用 Electron 提供的开机自启动 API,为应用程序设置了开机自启动功能,那么在 Windows 操作系统下,用户注册表如下路径下会增加一个键值对:
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run键:electron.app.[yourAppName]值:C:\Program Files (x86)\[yourAppName]\[yourAppName].exe
设置开机自启动的代码如下所示:
import { app } from "electron";app.setLoginItemSettings({openAtLogin: true,});
另外 99% 的 Electron 应用是通过安装包分发给最终用户的,有安装包势必就有卸载程序,操作系统一般会在注册表如下三个路径下记录系统的卸载程序路径:
计算机\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall计算机\HKEY_LOCAL_MACHINE\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
如果开发者使用 app 对象的 setAsDefaultProtocolClient 方法,把自己的应用设置成可以通过外部连接唤起的应用,那么这个操作也会在用户的注册表内留下痕迹 , 如下为 GitHubDesktop 在我的注册表中写入的内容:
键:计算机\HKEY_CURRENT_USER\Software\Classes\github-windows\shell\open\command值:"C:\Users\liuxiaolun\AppData\Local\GitHubDesktop\app-2.9.0\GitHubDesktop.exe" --protocol-launcher "%1"
如你所见,当用户点击连接唤起我们的应用时,这个注册表键值不但给我的应用传递了--protocol-launcher 参数 , 还中转了连接中的参数给我的应用 。
Mac 没有注册表,相关的信息都是通过 Info.plist 文件和应用程序共同完成的 。
升级程序缓存目录前文我们介绍了全量升级 Electron 应用的方案,当 electron-updater 检测到升级服务器上存在新版本的应用程序时,会下载新版本相关的文件,并保存在如下目录中:
C:\Users\[userName]\AppData\Local\[appName]-updater\pending
下载完成后会校验新版本安装文件哈希值是否与服务器上的安装文件的哈希值相同 。
任务栏快捷方式如果用户把应用程序的快捷方式固定到任务栏,这个快捷方式的存放路径为:
C:\Users\[userName]\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
在一些特殊的情况下 , 我们可能要更新这个快捷方式的目标程序,比如用户先安装了 32 位的应用程序 , 又安装 64 位的应用程序,此时用户固定在任务栏的图标指向的目标程序路径就是错的了 。
Electron 为我们提供了读写快捷方式的 API:shell 模块下的 readShortcutLink
和 writeShortcutLink
, 开发者可以使用这两个 API 来更新任务栏上的快捷方式 。
Electron npm 包的特征Electron npm 包会被安装到工程的如下目录中:
yourSolutionDir\node_modules\electron
这个目录下 dist 子目录中存放着 Electron 的二进制文件,我们开发调试应用时,启动的就是下面这个应用程序:
yourSolutionDir\node_modules\electron\dist\electron.exe
这个包的导出文件是 index.js , 这个文件并没有什么特殊的逻辑,只是返回了上面 electron.exe 的路径 。如果你还记得我们在“如何开发 Vite3 插件构建 Electron 开发环境”章节中介绍的知识,我们就是通过require("electron")
获取 electron.exe 的路径的,如下代码所示:
let electronProcess = spawn(require("electron").toString(), [], {});
安装 Electron npm 包时,npm 会在如下路径下载 Electron 的二进制资源:
https://github.com/electron/electron/releases/download/v20.1.3/electron-v20.1.3-win32-x64.zip
这个地址包含如下了三个部分:
- 镜像部分:https://github.com/electron/electron/releases/download/ 。
- 版本部分:v11.1.0/ 。
- 文件部分:electron-v11.1.0-win32-x64.zip 。
- 镜像部分的环境变量:ELECTRON_MIRROR 。
推荐阅读
- 表驱动法在STM32中的应用
- 自动化利器 Ansible - 从了解到应用
- 状态估计和KalmanFilter公式的推导与应用
- 京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用
- Spring Boot 应用的热部署配置
- 图数据 3D 可视化在 Explorer 中的应用
- 线上kafka消息堆积,consumer掉线,怎么办?
- 苹果 App Store 开始支持隐藏上架应用:只能通过链接下载
- 支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用
- 不是有效Win32应用程序的解决方法(win32应用程序)