刷新由子进程更新的环境

时间:2019-03-15 11:17:35

标签: .net

我的程序使用Process.Start调用外部工具。我只是根据PATH环境变量中的位置来指定exe的名称。在此之前,我的程序会检查是否确实安装了包含此外部工具的系统,如果未安装,则通过再次使用process.Start运行msiexec来安装它。该安装程序修改了PATH,但是我的第二次调用失败,因为它找不到文件,并且我相信这是因为更新的环境变量不适用于当前正在运行的进程。

我是否可以通过环境更改来更新当前流程?还是可以通过某种方式确定安装程序已进行了哪些更改并将其提供给我的新流程?

请注意,当我启动msiexec时,我有UseShellExecute = True,因为我需要以管理员身份运行。当我启动另一个exe时,我有UseShellExecute = False,因为我需要从StandardOutput中读取内容。

1 个答案:

答案 0 :(得分:0)

这似乎可以解决问题:

    Dim path = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine)
    Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Process)

它从机器设置中读取Path环境变量,并将它们写入当前的过程设置。