5

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

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 是只读的,所以很多帮助就是......

4

2 回答 2

5

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

来自MSDN ProcessStartInfo.EnvironmentVariables 属性

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

于 2012-11-06T16:59:10.573 回答
1

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

process.StartInfo.EnvironmentVariables['name'] = value;
于 2012-11-06T16:59:54.147 回答