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

时间:2012-11-06 16:56:30

标签: c# .net 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;
}

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

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

2 个答案:

答案 0 :(得分:3)

您可以为其添加值。

来自MSDN ProcessStartInfo.EnvironmentVariables Property

  

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

答案 1 :(得分:1)

您可以使用索引器设置环境变量:

process.StartInfo.EnvironmentVariables['name'] = value;