【问题标题】:unable to provide inputs to the command through c# executing in command window无法通过在命令窗口中执行的 c# 向命令提供输入
【发布时间】:2017-08-31 09:30:39
【问题描述】:

我正在尝试通过 C# 代码在除控制台窗口之外的 cmd 窗口上执行命令(在 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)没有按预期输入。它在执行此程序时不显示任何输出。我如何能够传递输入并存储输出?

【问题讨论】:

    标签: c# windows visual-studio cmd


    【解决方案1】:

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

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

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

    string s_UserName = cmd.StandardOutput.ReadToEnd();
    

    密码也一样。

    【讨论】:

      【解决方案2】:

      获取您的进程基础流:

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

      发送/读取就像 sr.ReadLine, sw.Writeline 一样简单!

      【讨论】:

        【解决方案3】:

        使用输入/输出重新编辑

        cmd.StartInfo.RedirectStandardInput = true;
        
        cmd.StartInfo.RedirectStandardOutput = true;
        

        并且使用cmd.StandardInputcmd.StandardOutput 来读/写进程。

        【讨论】:

        • 我在我的项目中应用了您的建议并做了更多的研究。我知道标准输入与大多数交互式 cmd 命令一起使用。但我的问题仍然存在,即我无法自动为这个特定命令提供输入(java -jar Reporter.jar p=Reporter.properties m=Normal Sales.viewToken)。我已经更新了我的问题陈述。
        • @vivekm91 那么它对于其他命令需要输入吗?只是对于这个特定的它不起作用?
        • 是的......正是......对于其他命令它工作正常,它需要输入。但是对于这个特定的命令,它不需要输入。
        • 有一个机会,因为他们要求用户/通行证,他们故意不允许这种方法,但我不确定,我会尝试将此方法与另一个询问的 windows 命令一起使用用户/通行证
        猜你喜欢
        • 2017-08-17
        • 2017-08-19
        • 2013-01-11
        • 1970-01-01
        相关资源
        最近更新 更多