Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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# 如何防止在.NET中使用Process类调用的DOS/Console应用程序在完成后自动关闭命令提示符?_C#_.net_Winforms - Fatal编程技术网

C# 如何防止在.NET中使用Process类调用的DOS/Console应用程序在完成后自动关闭命令提示符?

C# 如何防止在.NET中使用Process类调用的DOS/Console应用程序在完成后自动关闭命令提示符?,c#,.net,winforms,C#,.net,Winforms,在我的Winform应用程序中,我需要调用DOS或控制台应用程序,并使用以下代码: Process proc = new Process(); proc.StartInfo.FileName = lLocation.Text+"\\pywin32.exe"; proc.StartInfo.Arguments = lLocation.Text+"\\data.pos"; proc.Start(); 问题是,应用程序在屏幕上输出结果后,命令提示符立即关闭,因此我无法

在我的Winform应用程序中,我需要调用DOS或控制台应用程序,并使用以下代码:

    Process proc = new Process();
    proc.StartInfo.FileName = lLocation.Text+"\\pywin32.exe";
    proc.StartInfo.Arguments = lLocation.Text+"\\data.pos";
    proc.Start();
问题是,应用程序在屏幕上输出结果后,命令提示符立即关闭,因此我无法读取该应用程序的结果


一种解决方案可能是在最后创建带有“pause”命令的.bat文件,并在Process类中使用该文件,但我想知道是否还有其他方法?

您可以读取流程的输出:

Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = lLocation.Text+"\\pywin32.exe";
proc.StartInfo.Arguments = lLocation.Text+"\\data.pos";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();

然后对输出执行任意操作。

很难控制另一个进程控制台的生命周期。带暂停的批处理文件看起来是解决问题的简单方法。除非你想走布兰登之路。

MS-DOS-真的?!?!?!你不是指Windows命令行应用程序吗??MS-DOS已经成为历史了——已经有很长一段时间了……是的,尽管旧版本的应用程序在MS-DOS中运行,但现在可能是Windows控制台应用程序。谢谢你指出这一点。谢谢你的提示。这是有效的,但只有在我添加了这段代码
proc.StartInfo.RedirectStandardOutput=true之后;proc.StartInfo.UseShellExecute=false。否则会出现异常。虽然这会捕获文本,但不会捕获任何可能用于指示内容的颜色(例如红色错误)