将自定义环境变量传递给 System.Diagnostics.Process

Mik*_*lin 5 .net c# environment-variables

我正在开发一个调用外部进程的应用程序,如下所示:

ProcessStartInfo startInfo = new ProcessStartInfo(PathToExecutable, Arguments){
     ErrorDialog = false,
     RedirectStandardError = true,
     RedirectStandardOutput = true,
     UseShellExecute = false,
     CreateNoWindow = true,
     WorkingDirectory = WorkingDirectory
 };

using (Process process = new Process()) {
    process.StartInfo = startInfo;

    process.Start();
    process.BeginErrorReadLine();
    process.BeginOutputReadLine();
    process.WaitForExit();

    return process.ExitCode;
}
Run Code Online (Sandbox Code Playgroud)

我正在调用的进程之一取决于我不希望我的用户设置的环境变量。有没有办法修改发送到外部进程的环境变量?理想情况下,我可以让它们仅对正在运行的进程可见,但是如果我必须以编程方式在系统范围内设置它们,我会满足于此(但是,UAC 会强制我以管理员身份运行吗? )

ProcessStartInfo.EnvironmentVariables 是只读的,所以很多帮助是...

Aus*_*nen 5

不过,您可以为其添加值。

从MSDN ProcessStartInfo.EnvironmentVariables 属性:

尽管您无法设置 EnvironmentVariables 属性,但您可以修改该属性返回的 StringDictionary。例如,以下代码添加了一个 TempPath 环境变量: myProcess.StartInfo.EnvironmentVariables.Add("TempPath", "C:\\Temp"). 您必须将UseShellExecute属性设置为false才能在更改 EnvironmentVariables 属性后启动进程。如果 UseShellExecute为true,则在调用 Start 方法时抛出 InvalidOperationException 。