如何在退出时删除所有电子膨胀软件?

Ale*_*lex 5 javascript chromium node.js 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();
});
Run Code Online (Sandbox Code Playgroud)

Zac*_*Zac 3

经过一些测试后,我发现您必须在电子进程结束删除文件(尝试在退出退出 应用程序事件中删除文件不会删除文件/文件夹;它们会被重新删除) -立即创建。电子中的某些东西(可能是 Chromium)希望这些文件/文件夹在应用程序运行时存在,并且要弄清楚如何挂钩它需要太多工作)。

对我有用的是从 shell 中生成一个分离的 cmd,等待 3 秒,然后删除给定应用程序文件夹中的所有文件/文件夹。读者要做的练习是隐藏ping命令的输出(或隐藏窗口,但在这方面取得的成功有好有坏),或选择不同的命令。我找到了timeout工作,但是sleepand 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();
});
Run Code Online (Sandbox Code Playgroud)

正如另一位用户提到的,您的电子会话中有一种可用的方法,它是一个本机 API,可以清除所有这些文件/文件夹。然而,它返回一个承诺,我无法弄清楚如何在这些应用程序事件之一中同步执行它。

参考#1