electron 电子与哨兵:如何在运行多个电子进程时不合并标签/上下文

enyaitl3  于 2023-06-20  发布在  Electron
关注(0)|答案(1)|浏览(156)

我有一个Electron.js应用程序,沿着正常的主进程外,我还spawn主进程的副本。在主进程的副本中,我加载了C++本机模块,这些模块可能会在生产中的某些机器上导致问题,我收集了该派生进程的遥测数据。

sandbox.ts

...
export const isSandbox = (): boolean => process.env.SANDBOXED === '1';
...
if (isSandbox()) {
   console.log('startSandbox - already in sandbox');
   return;
}

const exePath = app.getPath("exe");

const spawnProcess = spawn(exePath, process.argv.slice(1), {
  env: {
    ...process.env,
    SANDBOXED: "1",
  },
});
...

我还使用Sentry来收集应用程序的本地崩溃。我这样初始化它:

index.ts-这个文件在正常和衍生的“沙箱”进程中运行

...
const SentryEnv = import.meta.env.VITE_SENTRY_ENVIRONMENT;
if (["testing", "beta", "production"].includes(SentryEnv))
  Sentry.init({
    dsn: "https://000@sentry.myapp.app/1",
    environment: SentryEnv,
  });
Sentry.setTag("sandbox", isSandbox());
...

然而,发生的情况是,主第一个进程总是将标记设置为false,无论错误是从主进程还是从派生进程引发的。

我猜这就是哨兵合并上下文的方法
我如何才能实现我所需要的?所以衍生的进程错误在Sentry UI中标记为Sandbox: true,而正常的主进程错误标记为Sandbox: false

8xiog9wr

8xiog9wr1#

找到一个解决方法:

index.ts

if (isSandbox()) {
    crashReporter.addExtraParameter('sandbox', '1');
  } else {
    crashReporter.addExtraParameter('sandbox', '0');
  }

如果我使用Electron crashReporter API设置dmp元数据,它们就会正确地出现在Sentry UI中。

相关问题