2012-03-01 94 views
3

我尝试运行在命令行命令的Process.Start(),并试图让输出到字符串或一些有用的locaiton。输出将由几行组成(如DIR命令)。我读了如何做,但它不适合我。它运行,但然后进入循环,并不停止。参见下文。有任何想法吗?如何从我的命令行捕获标准输出?

 ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe", 
                    @" /k dir"); 
     Process myProcess = new Process(); 
     myProcess.StartInfo.RedirectStandardOutput = true; 
     myProcess.StartInfo.UseShellExecute = false; 
     myProcess.StartInfo.FileName = "cmd.exe"; 
     myProcess.StartInfo.Arguments = @" /k dir"; 
     myProcess.Start();   

     string ppp = myProcess.StandardOutput.ReadToEnd(); 
     myProcess.WaitForExit(); 
+0

[运行从ASPX页命令行,和返回输出到页]的可能重复(http://stackoverflow.com/问题/ 247668 /运行的命令行-从-AN-ASPX页和 - 返回输出到页)的 – Shai 2012-03-01 14:24:57

+0

可能重复的[重定向有效地.NET标准输出(http://stackoverflow.com/问题/ 164736/redirect-standard-output-effective-in-net) – 2012-03-01 14:35:39

+0

好吧,谢谢你的快速回复。它没有工作对我来说...还是被卡住,什么都不做,如果是在一个循环中 – MottiNissim 2012-03-01 14:39:42

回答

3

你的过程将自身永远不会退出,因为你传递的/K标志cmd.exe将保持窗口打开(因此处理活着),它运行的命令后。

/K执行字符串指定的命令,但仍然

我认为你在这里寻找的是使用/C运行你的命令后,将关闭命令窗口。

/C执行字符串指定的命令,然后终止

+0

这是事实,它帮助和工作。如果你有一个命令不能在cmd.exe中自行终止,就像运行这个进程一样:cmd.exe sqlplus bla bla bla? sqlplus本身不会终止,所以整个过程仍然会卡住... – MottiNissim 2012-03-02 09:32:40