【问题标题】:pass custom environment variables to System.Diagnostics.Process将自定义环境变量传递给 System.Diagnostics.Process
【发布时间】:2012-11-06 16:56:29
【问题描述】:

我正在开发一个像这样调用外部进程的应用程序:

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

【问题讨论】:

  • 您无法控制外部进程吗?否则,如果您这样做,为什么不能将其作为参数传递呢?

标签: c# .net environment-variables


【解决方案1】:

你可以给它添加值。

来自MSDN ProcessStartInfo.EnvironmentVariables Property

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

【讨论】:

  • 谢谢。不知怎的,我错过了。我想我在上面的那一行停止了阅读,“默认值为空”。听起来默认值实际上是一个空字典。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 2013-12-29
    • 1970-01-01
    • 2013-06-05
    • 2021-09-05
    • 2020-03-27
    • 2017-03-30
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多