2013-08-02 3 views
2

в программировании и я пишу процесс, который предполагается открыть CMD строке выполнить командуПеренаправление вывода из Cmd строки

"/k nslookup 123.123.123.123; 

А затем перенаправить стандартный вывод в строку, так что данные можно манипулировать. Я пробовал различные комбинации, но не могу заставить программу выводить что-либо, кроме моей последней строки «Нажмите любую клавишу, чтобы закрыть».

Мне кажется, что мне не хватает чего-то очень простого, поскольку я не могу найти что-то не так с моим кодом. У кого-нибудь есть предложения?

try 
     { 
      string strCmdText; 
      strCmdText = "/k nslookup 123.123.123.123"; 

      // Start the process. 
      Process p = new Process(); 

      //The name of the application to start, or the name of a document 
      p.StartInfo.FileName = "C:/Windows/System32/cmd.exe"; 
      // On start run the string strCmdText as a command 
      p.StartInfo.Arguments = strCmdText; 

      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.CreateNoWindow = true; 

      p.Start(); 

      // Read the output stream first and then wait. 
      string output = p.StandardOutput.ReadLine(); 
      p.WaitForExit(); 
      Console.WriteLine(output); 

     } 
     catch (Exception) 
     { 
      Console.WriteLine("error"); 
     } 

//Wait for user to press a button to close window 
     Console.WriteLine("Press any key..."); 
     Console.ReadLine(); 

ответ

0

Я думаю, что это потому, что приглашение командной строки не выходит. Вместо передачи аргументов напишите их на стандартный ввод, а затем выйдите, например:

 p.StartInfo.Arguments = ""; 

     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.RedirectStandardInput = true; 
     p.StartInfo.CreateNoWindow = true; 

     p.Start(); 

     p.StandardInput.WriteLine("/k nslookup 123.123.123.123"); 
     p.StandardInput.WriteLine("exit"); 

     // Read the output stream first and then wait. 
     string output = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 
     Console.WriteLine(output); 
+0

Приятный улов, но на самом деле у меня это было изначально и я забыл его вернуть. Фигурировал, что я поиграю, чтобы посмотреть, смогу ли я заставить что-нибудь работать. К сожалению, ReadToEnd не решает проблему. – user2428835

+0

Хорошо, отредактировал сообщение с другой идеей. –

Смежные вопросы