我目前正在开发一个使用第三方软件的Electron应用程序。在某个时候,我正在检查该软件是否已安装在用户的计算机上(必须在PATH中),如果没有安装,则只运行安装程序。就像我说的,安装会将目录附加到PATH变量。发生这种情况之后,我需要重新启动应用程序才能访问更新的变量。
我已经尝试使用relaunch
,就像在文档中一样,但是它没有刷新变量:
app.relaunch()
app.exit(0)
如果我手动重新启动应用程序,则一切正常。
有人有什么想法吗?谢谢。
答案 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
,重新启动后将不会显示该应用程序。我不知道。