加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从Process StandardOutput获取值

发布时间:2020-12-16 01:21:18 所属栏目:百科 来源:网络整理
导读:我试图获取输出以显示我的机器上当前打开的文档,但无论如何它都会返回NULL. StringCollection values = new StringCollection();var proc = new Process{ StartInfo = new ProcessStartInfo { FileName = "openfiles.exe",Arguments = "/query /FO CSV /v",U
我试图获取输出以显示我的机器上当前打开的文档,但无论如何它都会返回NULL.

StringCollection values = new StringCollection();
var proc = new Process
{
     StartInfo = new ProcessStartInfo
     {
          FileName = "openfiles.exe",Arguments = "/query /FO CSV /v",UseShellExecute = false,RedirectStandardOutput = true,CreateNoWindow = true
     }
};
proc.Start();
while (!proc.StandardOutput.EndOfStream)
{
     string line = proc.StandardOutput.ReadLine();
     values.Add(line);
}
foreach (string sline in values)
MessageBox.Show(sline);

编辑:

在进一步审查期间,我发现我遇到了一个异常问题.在我的诊断运行期间,我得到以下内容:
Proc.BasePriority是System.InvalidOperationException类型的异常

编辑:

尝试将代码拉为:

string val = proc.StandardOutput.ReadToEnd();
MessageBox.Show(val);

返回时也是NULL值,并且proc甚至在proc.start();之后仍然有错误.

解决方法

您必须同时读取标准输出和标准错误流.这是因为你无法从同一个线程中读取它们.

要实现这一点,您必须使用将在单独的线程上调用的eventhandlers.

将代码编译为anycpu,因为openfiles有32位和64位变体.如果架构不匹配,它可能找不到可执行文件.

从错误流中读取的行前缀为! >所以他们在输出中脱颖而出.

StringCollection values = new StringCollection();
    var proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "openfiles.exe",RedirectStandardError = true,CreateNoWindow = false
        }
    };
    proc.Start();

    proc.OutputDataReceived += (s,e) => {
        lock (values)
        {
            values.Add(e.Data);
        }
    };
    proc.ErrorDataReceived += (s,e) => {
        lock (values)
        {
            values.Add("! > " + e.Data);
        }
    };

    proc.BeginErrorReadLine();
    proc.BeginOutputReadLine();

    proc.WaitForExit();
    foreach (string sline in values)
        MessageBox.Show(sline);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读