发送密码/字符串到外部控制台应用程序C#

时间:2013-01-03 09:21:45

标签: c# process console pipe prompt

我需要从C#自动化外部Windows控制台应用程序。应用程序基本上是与外部设备的接口。当我调用应用程序时,它将要求我进行身份验证,即输入密码并提示“输入密码:”。现在没有办法将此应用程序配置为在没有交互式密码提示的情况下运行。

因此,我想通过在提示时发送密码然后触发将在外部设备上执行然后获取输出的命令来从C#自动执行相同操作。我知道进程类,我有一些指针,就像我可以使用管道为此目的(不确定?)。

由于我在寻找帮助/方向之前没有处理过这种自动化。

先谢谢。

1 个答案:

答案 0 :(得分:5)

执行此操作的方法是使用重定向成员,例如ProcessStartInfo.RedirectStandardInput Property

     Process myProcess = new Process();

     myProcess.StartInfo.FileName = "someconsoleapp.exe";
     myProcess.StartInfo.UseShellExecute = false;
     myProcess.StartInfo.RedirectStandardInput = true;
     myProcess.StartInfo.RedirectStandardOutput = true;
     myProcess.StartInfo.ErrorDialog = false;

     myProcess.Start();

     StreamWriter stdInputWriter  = myProcess.StandardInput;
     StreamReader stdOutputReader  = myProcess.StandardOutput;

     stdInputWriter.WriteLine(password);

     var op = stdOutputReader.ReadLine();

     // close this - sending EOF to the console application - hopefully well written
     // to handle this properly.
     stdInputWriter.Close();


     // Wait for the process to finish.
     myProcess.WaitForExit();
     myProcess.Close();