Получение данных от приложения запущенного на VirtualBox
От: Аноним  
Дата: 13.08.14 14:48
Оценка:
Здравствуйте, у меня есть виртуальная машина на VirtualBox.
Пишу отдельное приложение на c#, которое бы получала от процесса запущенного на виртуалке информацию.
Для этих нужд в VirtualBox есть утилита VBoxManage, которая позволяет запустить любое приложение на виртуалке и получить консоль исполняемого приложение.
VBoxManage = new Process();
VBoxManage.StartInfo.CreateNoWindow = true;
VBoxManage.StartInfo.FileName = "cmd.exe";
VBoxManage.StartInfo.WorkingDirectory = "c:\\Program Files\\Oracle\\VirtualBox\\";
VBoxManage.StartInfo.Arguments = "/c VBoxManage.exe guestcontrol VBox execute --image \"ping.exe\" --username Администратор --password 1 --wait-stdout -- ya.ru";
VBoxManage.StartInfo.UseShellExecute = false;
VBoxManage.StartInfo.RedirectStandardOutput = true;
VBoxManage.OutputDataReceived += OutputDataReceivedEventHandler;
VBoxManage.Start();

protected virtual void OutputDataReceivedEventHandler(Object sender, DataReceivedEventArgs e)
{
String line = "";
if (String.IsNullOrEmpty(e.Data) == false)
{
i++;
line = e.Data;
Debug.WriteLine(i.ToString());
Debug.WriteLine(e.Data);
}
}

Проблема в том, что я консоль Output с приложения ping.exe приходит только когда приложение ping.exe завершится. Хотя если запустить в cmd.exe строку /c VBoxManage.exe guestcontrol VBox execute --image \"ping.exe\" --username Администратор --password 1 --wait-stdout -- ya.ru, то будет сразу выводится сообщения о пинге. Я так понял что это проблема VBoxManage, но как мне получить то что выводится на консоль realtime, ведь оно приходит, а программно только по завершении процесса ping.exe на виртуалке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.