Выполнение команд консольной программы из другой программы - C#
Формулировка задачи:
Подскажите пожалуйста можно ли получить контроль над консольной прогой из другой самописной проги. То есть есть запущеная консольная прога, чтобы запустить какое то действие из этой проги, соответственно нужно в ней напечатать команду и нажать Enter для запуска команды. Как самописной прогой отправлять такие команды, как бутто их ввожу я, руками?
Решение задачи: «Выполнение команд консольной программы из другой программы»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Tower
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Process process = new Process();
process.StartInfo.FileName = @"D:\Drone\MAVProxy\MAVProxy.exe";
// Indicate that we want to read from standard output
// of process
process.StartInfo.RedirectStandardInput = true;
// Indicate that we want to write to standard input of
// process
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();
tBox_Log.Text = "MAVProxy starting...";
StreamWriter writer = process.StandardInput;
// Get a StreamReader to read from standard output of
StreamReader reader = process.StandardOutput;
// Get the question from greeter
tBox_Log.Text = reader.ReadLine();
// Answer Greeter with Robot
writer.WriteLine("link add 127.0.0.1:14550");
tBox_Log.Text = reader.ReadLine();
Thread readThread = new Thread(new ThreadStart(readData));
readThread.Start();
Thread writeThread = new Thread(new ThreadStart(writeData));
writeThread.Start();
}
private void readData()
{
String readBuff;
while ((readBuff = reader.ReadLine()) != null) //Read received data from connected programm
{
tBox_Log.Text = readBuff;
writer.WriteLine(readBuff);
}
}
private void writeData()
{
String writeBuff;
while ((writeBuff = Console.ReadLine()) != null)//Writing data to connected programm
{
tBox_Log.Text = writeBuff;
writer.WriteLine(writeBuff);
}
}
}
}