C# 使用C与控制台完全通信
我正在开发一个程序,使用C和电报机器人控制VPS中的CMD。 电报机器人和程序之间的连接非常好,所以这不是问题。 我想在同一cmd窗口中从我的电报机器人写入命令。 要将字符串命令发送到cmd,我使用: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();
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的结束。。。在第一次调用后,您将关闭并处理流。请创建一个,运行它,并从中向我们提供完整的堆栈跟踪-不仅是异常类型,还有它发生的消息和行。谢谢!它奏效了: