我正在开发一个调用外部流程的应用程序:
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是只读的,所以有很多帮助......
答案 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;