Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取进程输出的替代方案_C#_Process_Io - Fatal编程技术网

C# 读取进程输出的替代方案

C# 读取进程输出的替代方案,c#,process,io,C#,Process,Io,我想知道在C#中捕获流程输出是否还有其他替代方法。 我有以下代码 Process __process = new Process(); __process.StartInfo.Verb = "runas"; __process.StartInfo.FileName = "some file path here"; __process.StartInfo.UseShellExecute = true; __process.Start(); __process.WaitForExit(300000)

我想知道在C#中捕获流程输出是否还有其他替代方法。 我有以下代码

Process __process = new Process();
__process.StartInfo.Verb = "runas";
__process.StartInfo.FileName = "some file path here";
__process.StartInfo.UseShellExecute = true;
__process.Start();
__process.WaitForExit(300000);
此处UseShellExecute设置为true的原因是,动词“runas”必须以管理员身份运行。因此,我无法再重定向程序的标准输出。
如果我不能使用StandardOutput,还有哪些方法可以捕获流程的输出?我曾考虑让程序写入文件,然后从该文件中读取,但这似乎不是很有效。

如果你能对实际程序进行编码,那么你将开始使用管道,这可能是最好/最有效的解决方案。可能有一种方法可以让流程输出通过其他命令/程序进行管道传输

您可以创建一个命名的or,并将其名称/id/handle作为参数传递给程序。然后,程序可以连接到管道的另一端,并将数据流传回调用它的应用程序


编辑我假设这都是在Windows环境下运行的,我不知道在以
UseShellExecute=true
启动的进程上使用管道是否有效。

我不建议将管道作为跨不同帐户通信的第一个选项(请注意,OP需要“runas”的管道)由于需要正确处理安全性以使其工作(尤其是在没有合理样本的情况下)。如果可能的话,按照OP的建议将数据保存到文件会更容易/更安全。@AlexeiLevenkov同意,保存到文件肯定会更容易。我只是建议这样做,因为OP已经考虑使用文件,无法捕获标准输出。我有点急于给出一个替代方案,但我确实倾向于努力提高代码的效率。。。这个过程需要经常运行吗?输出是否会非常大,并且需要相当长的时间才能读入?如果没有,那么如果可以的话,我会继续使用文件I/O