如何将Process的输出捕获到一个C#变量中?

19 浏览
0 Comments

如何将Process的输出捕获到一个C#变量中?

我在Windows命令提示符中运行以下命令,并得到如下输出:

C:\>logman.exe FabricTraces | findstr Root
Root Path: C:\ProgramData\Windows Fabric\Fabric\log\Traces\

现在,我正在尝试在C#程序中模仿相同的操作,并希望将输出(C:\ProgramData\Windows Fabric\Fabric\log\Traces\)捕获到一个变量中。

如何实现这一点,以下是我尝试过的代码:

Process P = Process.Start("logman.exe", "FabricTraces | findstr Root");
P.WaitForExit();
var result = P.ExitCode;

0
0 Comments

问题的出现原因:在使用C#编程时,有时需要将一个进程(Process)的输出捕获到一个变量中,以便后续处理或展示。

解决方法:以下是一种实现此功能的方法:

1. 创建一个私有方法StartProcess(),该方法用于启动进程。

2. 在StartProcess()方法中,创建一个Process对象,设置其StartInfo属性,包括要执行的文件的路径、参数、工作目录等。

3. 设置process对象的RedirectStandardOutput属性为true,这样可以将进程的输出重定向到一个流中。

4. 设置process对象的RedirectStandardError属性为true,这样可以将进程的错误输出重定向到一个流中。

5. 设置process对象的UseShellExecute属性为false,代表不使用操作系统的Shell来执行进程。

6. 设置process对象的CreateNoWindow属性为true,代表不创建进程的窗口。

7. 为process对象的OutputDataReceived事件和ErrorDataReceived事件分别绑定事件处理方法Process_OutputDataReceived和Process_ErrorDataReceived。

8. 调用process对象的Start()方法启动进程。

9. 调用process对象的BeginOutputReadLine()方法和BeginErrorReadLine()方法,分别开始异步读取进程的输出和错误输出。

10. 调用process对象的WaitForExit()方法等待进程执行完毕。

11. 创建私有方法Process_ErrorDataReceived,该方法用于处理进程的错误输出。

12. 创建私有方法Process_OutputDataReceived,该方法用于处理进程的标准输出。

13. 在Process_ErrorDataReceived方法中,通过e.Data获取包含错误消息的字符串。

14. 在Process_OutputDataReceived方法中,通过e.Data获取包含输出的字符串。

通过以上步骤,我们可以将一个进程的输出捕获到C#变量中,实现对进程输出的处理和展示。

0