无法通过在命令窗口中执行的c#提供输入命令

问题描述:

我试图通过除控制台窗口(在Ctrl + F5上打开)以外的cmd窗口上的c#代码执行命令。在执行命令时,它会询问用户名和密码。现在,我应该如何通过用户名和密码一个接一个。
完成处理后,它会生成2行输出,以便在稍后使用的c#代码中读取。更新后的代码写了这么远给出如下:无法通过在命令窗口中执行的c#提供输入命令

using System; 
using System.IO; 
using System.Diagnostics; 

namespace ios 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ProcessStartInfo procStartInfo = new ProcessStartInfo(); 
      procStartInfo.FileName = "cmd.exe"; 
      procStartInfo.Arguments = "/C java -jar Reporter.jar p=Reporter.properties m=Normal Sales.viewToken"; 
      procStartInfo.UseShellExecute = false; 
      procStartInfo.RedirectStandardOutput = true; 
      procStartInfo.RedirectStandardError = true; 
      procStartInfo.RedirectStandardInput = true; 

      using (Process process = new Process()) 
      { 
       process.StartInfo = procStartInfo; 
       process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler); 
       process.Start(); 
       StreamWriter streamWriter = process.StandardInput; 
       streamWriter.WriteLine("myusername"); 
       streamWriter.WriteLine("password"); 

       streamWriter.Close(); 
       process.BeginErrorReadLine(); 
       process.WaitForExit(); 
      } 
     } 

     static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
     { 
      Console.WriteLine("Output shown : " + outLine.Data); 
      if (outLine.Data != null && outLine.Data.Contains("AccessToken")) 
      { 
       Console.WriteLine("Line Echoed : " + outLine.Data); 
      } 
      if (outLine.Data != null && outLine.Data.Contains("Expiration Date")) 
      { 
       Console.WriteLine("Line Echoed : " + outLine.Data); 
      } 
     } 
    } 
} 

现在,它与其他命令完美的工作。但是我显示的命令(java -jar Reporter.jar p = Reporter.properties m = Normal Sales.viewToken)没有按预期输入数据。它不显示执行此程序的任何输出。我将如何能够通过输入并存储输出?

让您的突未基地流:

StreamWriter sw = cmd.StandardInput 
StreamReader sr = sr.StandardOutput 

发送/读取是sr.ReadLine,sw.Writeline容易!

使用输入/输出rederiction

cmd.StartInfo.RedirectStandardInput = true; 

cmd.StartInfo.RedirectStandardOutput = true; 

和使用cmd.StandardInputcmd.StandardOutput读/写的过程。

+0

我将你的建议应用到我的项目中,并做了更多的研究。我知道标准输入可以处理大多数交互式cmd命令。但我的问题仍然存在,即我无法自动提供输入到此特定命令(java -jar Reporter.jar p = Reporter.properties m = Normal Sales.viewToken)。我已更新了我的问题陈述。 – vivekm91

+0

@ vivekm91对于其他命令它需要输入吗?只为这个特定的一个它不起作用? –

+0

是的..确切地说...对于其他命令它的工作正常,它需要输入。但是对于这个特定的命令,它并不需要输入。 – vivekm91

输出字符串到您的命令:

cmd.StandartInput.WriteLine("Please Input UserName:"); 

获取的字符串,用户输入命令:

string s_UserName = cmd.StandardOutput.ReadToEnd(); 

而同样的密码。