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

时间:2017-08-31 09:30:39

标签: c# windows visual-studio cmd

我正在尝试通过除控制台窗口之外的cmd窗口上的c#代码执行命令(在Ctrl + F5上打开)。在执行命令时,它会要求输入用户名和密码。现在,我应该如何逐个传递用户名和密码 在完成处理后,它会生成2行输出,这些输出将在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)没有按预期输入。它在执行此程序时不显示任何输出。我如何能够传递输入并存储输出?

3 个答案:

答案 0 :(得分:1)

将字符串输出到您的命令:

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

获取用户在Command中输入的字符串:

string s_UserName = cmd.StandardOutput.ReadToEnd();

密码也一样。

答案 1 :(得分:0)

获取您的流程基础流:

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

发送/阅读就像sr.ReadLine,sw.Writeline!

一样简单

答案 2 :(得分:0)

使用输入/输出重新存储

cmd.StartInfo.RedirectStandardInput = true;

cmd.StartInfo.RedirectStandardOutput = true;

使用cmd.StandardInputcmd.StandardOutput来读取/写入流程。