javascript - 如何在退出时删除所有 Electron 膨胀软件?
问题描述
当电子应用程序退出时,如何从“AppData\roaming\MyApp”文件夹中删除 cookie、本地存储和其他垃圾?
我尝试在应用程序退出时删除整个目录,但它引发了 EBUSY 错误。显然文件被锁定或其他东西,几乎就像有人不希望我们能够消除膨胀?
const fs = require('fs-extra');
const clearBloat = async () => fs.remove(path.join(app.getPath('appData'), app.name));
app.on('window-all-closed', async () => {
await clearBloat();
});
解决方案
经过一些测试后,我发现您必须在电子过程结束后删除文件(尝试在退出或将退出 应用程序事件中删除文件不会删除文件/文件夹;它们会重新-立即创建。电子中的某些东西(可能是 Chromium)希望这些文件/文件夹在应用程序运行时存在,并且弄清楚如何挂钩它的工作量太大)。
对我有用的是从等待 3 秒的 shell 中生成一个分离的 cmd,然后删除给定应用程序文件夹中的所有文件/文件夹。读者的练习将是隐藏ping
命令的输出(或隐藏窗口,但在这方面取得了好坏参半),或选择不同的命令。我找到timeout
了作品,但是sleep
(choice
即类似这样的东西)不起作用。
以下是您需要添加的内容:
const { app } = require("electron");
const { spawn } = require("child_process");
const path = require("path");
...
app.on("will-quit", async (event) => {
const folder = path.join(app.getPath("appData"), app.name);
// Wait 3 seconds, navigate into your app folder and delete all files/folders
const cmd = `ping localhost -n 3 > nul 2>&1 && pushd "${folder}" && (rd /s /q "${folder}" 2>nul & popd)`;
// shell = true prevents EONENT errors
// stdio = ignore allows the pipes to continue processing w/o handling command output
// detached = true allows the command to run once your app is [completely] shut down
const process = spawn(cmd, { shell: true, stdio: "ignore", detached: true });
// Prevents the parent process from waiting for the child (this) process to finish
process.unref();
});
正如另一位用户提到的,您的电子会话中有一种方法可用,它是一个清除所有这些文件/文件夹的本机 API。但是,它返回了一个承诺,我无法弄清楚如何在这些应用程序事件之一中同步执行它。
推荐阅读
- sparql - SPARQL DBpedia 获取知道其姓名的人的属性
- anylogic - 将模型导出为应用程序后可以设置模型开始时间吗
- javascript - highstock(highchart) livedata 可以有移动动画点吗?
- c# - 使用比较器通过字典中的值来比较器键,SortedDictionary 总是抛出异常
- javascript - Mongoose 中字段的每个不同值的行数
- java - 创建自定义 JOptionPane 输入对话框,该对话框将在 5 秒内关闭或由用户操作关闭。详情如下
- javascript - 对从 Flatlist React 本机中呈现的 db 获取的对象数组进行排序
- go - 在 Go 中编写多个带有数字范围的嵌套 if-else 的简洁方法
- pandas - 使用基于时间的数据的 rolling() 函数计算简单的移动平均线
- docker - 如何解决 Windows 10 家庭版 Intellij Utilmate 上 docker 无法启动的问题?泊坞窗服务已开启