【问题标题】:Get Environment Variable out of new Process in c#从 C# 中的新进程中获取环境变量
【发布时间】:2015-12-15 11:42:09
【问题描述】:

我有一个 c# 应用程序,它生成一个新进程,其中设置了环境变量。在 c# 应用程序中,在进程运行期间,我想访问该变量。

源代码如下:

        Process p = new Process();
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.Arguments = "/c " + "\"" + "set MYSPECIALENV=someContent & set & pause" + "\"";
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.UseShellExecute = true;

        Console.WriteLine("Starting process");
        p.Start();
        ICollection envVarsSpawnedProcess = p.StartInfo.EnvironmentVariables.Keys;

        if (envVarsSpawnedProcess.Cast<string>().Contains("MYSPECIALENV"))
        {
            Console.WriteLine("Found! :)");
        }
        else
        {
            Console.WriteLine("Not found :(");

        }

        p.WaitForExit();

这个例子在某种程度上被简化了,因为在我的实际应用程序中,我执行了一个动态设置特定环境的命令脚本,但是这段代码 sn-p 将它降至最低。

关键是我需要访问在衍生进程中定义的环境变量,我需要从c#应用程序中访问它。

但是,我从 ProcessStartInfo 对象获得的环境变量列表似乎没有反映新创建的环境变量“mySpecialEnv”。

我的第一个疑问是 ProcessStartInfo 可能并没有真正访问进程的环境代码块,而只是从注册表中获取信息。有人可以证实这一点吗?我用谷歌搜索了很长时间,但没有找到确认...

我的第二个疑问是我遇到了竞争条件(例如,我尝试过早访问环境变量),但即使实施了轮询机制,我也没有得到更好的结果。

这是否有可能通过纯 .net 实现? 1) Spawn 进程创建一个新的环境变量 2) 从 c# 应用程序访问/读取此环境变量

非常感谢您!

【问题讨论】:

标签: c# .net process environment-variables


【解决方案1】:

在 p.start() 之后你需要等到它完成这个过程

然后您需要启动另一个进程来检查您的环境变量。

Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/c " + "\"" + "set MYSPECIALENV=someContent & set & pause" + "\"";
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.UseShellExecute = true;

    Console.WriteLine("Starting process");
    p.Start();
    p.WaitForExit();
    ICollection envVarsSpawnedProcess = p.StartInfo.EnvironmentVariables.Keys;

    if (envVarsSpawnedProcess.Cast<string>().Contains("MYSPECIALENV"))
    {
        Console.WriteLine("Found! :)");
    }
    else
    {
        Console.WriteLine("Not found :(");

    }

【讨论】:

  • 你能解释得更详细一点吗?我的第二个过程应该做什么?你尝试过你的提议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 2020-10-29
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2013-06-17
相关资源
最近更新 更多