无法通过在命令窗口中执行的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.StandardInput
和cmd.StandardOutput
读/写的过程。
答
输出字符串到您的命令:
cmd.StandartInput.WriteLine("Please Input UserName:");
获取的字符串,用户输入命令:
string s_UserName = cmd.StandardOutput.ReadToEnd();
而同样的密码。
我将你的建议应用到我的项目中,并做了更多的研究。我知道标准输入可以处理大多数交互式cmd命令。但我的问题仍然存在,即我无法自动提供输入到此特定命令(java -jar Reporter.jar p = Reporter.properties m = Normal Sales.viewToken)。我已更新了我的问题陈述。 – vivekm91
@ vivekm91对于其他命令它需要输入吗?只为这个特定的一个它不起作用? –
是的..确切地说...对于其他命令它的工作正常,它需要输入。但是对于这个特定的命令,它并不需要输入。 – vivekm91