电子-重新启动应用程序/刷新环境变量

时间:2018-07-10 12:18:28

标签: environment-variables electron

我目前正在开发一个使用第三方软件的Electron应用程序。在某个时候,我正在检查该软件是否已安装在用户的计算机上(必须在PATH中),如果没有安装,则只运行安装程序。就像我说的,安装会将目录附加到PATH变量。发生这种情况之后,我需要重新启动应用程序才能访问更新的变量。

我已经尝试使用relaunch,就像在文档中一样,但是它没有刷新变量:

app.relaunch()
app.exit(0)

如果我手动重新启动应用程序,则一切正常。

有人有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我的解决方案仅适用于生产:

在生产中,您的应用程序无法获取PC的环境变量。因此,在main.js中创建mainWindow时,应阅读环境变量并将其传递给process.env变量。重新启动该应用程序后,它将按预期重新加载环境。

正在使用的库:

https://github.com/sindresorhus/shell-env

https://github.com/sindresorhus/shell-path

import shellEnv from 'shell-env';
import os from 'os';
import shellPath from 'shell-path';

const isDevelopment = process.env.NODE_ENV === 'development';

function createMainWindow() {
  mainWindow = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
    },
    width: 800,
    height: 1000,
  });

  // ...

  if (!isDevelopment) {
    // TODO: if we're running from the app package, we won't have access to env vars
    // normally loaded in a shell, so work around with the shell-env module
    // TODO: get current os shell
    const { shell } = os.userInfo();

    const decoratedEnv = shellEnv.sync(shell);

    process.env = { ...process.env, ...decoratedEnv };

    console.log('DEBUG process.env', process.env);

    // TODO: If we're running from the app package, we won't have access to env variable or PATH
    // TODO: So we need to add shell-path to resolve problem
    shellPath.sync();
  }

  // ...
}

重新启动应用程序后,环境变量将被更新。

app.relaunch()
app.exit(0)

通知:未经检查的!isDevelopment,重新启动后将不会显示该应用程序。我不知道。