C# 使用C与控制台完全通信

C# 使用C与控制台完全通信,c#,bots,telegram,C#,Bots,Telegram,我正在开发一个程序,使用C和电报机器人控制VPS中的CMD。 电报机器人和程序之间的连接非常好,所以这不是问题。 我想在同一cmd窗口中从我的电报机器人写入命令。 要将字符串命令发送到cmd,我使用: public static void Trythis(Message comando) { Process p = new Process(); ProcessStartInfo info = new ProcessStartInfo();

我正在开发一个程序,使用C和电报机器人控制VPS中的CMD。 电报机器人和程序之间的连接非常好,所以这不是问题。 我想在同一cmd窗口中从我的电报机器人写入命令。 要将字符串命令发送到cmd,我使用:

public static void Trythis(Message comando)
    {
        Process p = new Process();
        ProcessStartInfo info = new ProcessStartInfo();
        info.FileName = "cmd.exe";
        info.RedirectStandardInput = true;
        info.UseShellExecute = false;
        String output = String.Empty;
        p.StartInfo = info;
        p.Start();

        using (StreamWriter sw = p.StandardInput)
        {
            if (sw.BaseStream.CanWrite)
            {
                sw.WriteLine(comando.Text);

            }
        }
        using (StreamReader streamReader = p.StandardOutput)
        {
            output = streamReader.ReadToEnd();
            Bot.SendTextMessageAsync(comando.Chat.Id, output);
        }



    }
}
但我在这一部分有一个例外:

        using (StreamReader streamReader = p.StandardOutput)
        {
            output = streamReader.ReadToEnd();
            Bot.SendTextMessageAsync(comando.Chat.Id, output);
        }
从:

无效操作例外

尚未为重定向定义StandardOutput流;确保ProcessStartInfo.RedirectStandardOutput设置为true,ProcessStartInfo.UseShellExecute设置为false

已使用BeginOutputReadLine为异步读取操作打开标准输出流

我认为您需要在开头添加这一行:

info.RedirectStandardOutput = true;

在包装对象上使用块调用Dispose的结束。。。在第一次调用后,您将关闭并处理流。

请创建一个,运行它,并从中向我们提供完整的堆栈跟踪-不仅是异常类型,还有它发生的消息和行。谢谢!它奏效了: