2015-01-30 2 views
-1

Я пытаюсь сделать следующее с VM доступ через RDP:виртуальная машина, удаленный рабочий стол, SendKeys C#

  1. Запуск командной строки Thread.Sleep достаточно долго, чтобы отключить RDP сессии (10 секунд, его нормально, если его дольше)

  2. Sendkeys для запуска командной строки для запуска exe, который работает в интерактивном режиме. Прекрасным примером может служить FTP. Если вы запустите FTP без параметров, вы получите интерактивное приглашение. Его длинная история о параметрах безопасности, но в командной строке не будет работать, он должен быть интерактивным .. Этот процесс не будет работать при подключении к RDP

У меня есть все, что работает для одной из основных проблем, за исключением. Как только я отключусь от RDP, для работы с кнопками sendkeys нет клавиатуры. Я не помню точной ошибки, но это было в основном «без клавиатуры».

У меня возникла идея, что, возможно, я смогу создать виртуальную клавиатуру, которая все еще будет «подключена», когда заканчивается сеанс RDP.

Я проверил, что процессы, даже DOS из командной строки будут продолжать работать после отключения RDP. Проблема изолирована для отправки ключей и клавиатуры виртуальной машины, когда она не подключена.

Я искал высоко и низко, но у меня есть я в тупике. Я понимаю, что это обходное решение вместо решения проблемы у источника, но у меня есть только этот вариант.

Единственная альтернатива, о которой я мог думать, - это что-то вроде работы SendKeys, но будет работать без клавиатуры?

Редактировать Просто, чтобы быть немного более ясным. Я нашел много других решений, которые будут работать, но я остался с этой единственной идеей.

Правила:

  1. Ничто не может быть установлен на виртуальной машине, например, как «тест автоматизации» инструмента

  2. Все должно быть построено в дом с нуля, используя VS2012 C# .net до 4.5.

Возможно, я могу найти инструмент автоматизации тестирования с открытым исходным кодом, но нет времени для исследования и преобразования того, что кажется сложным приложением.

Любые идеи наиболее ценятся.

+0

Кажется мне как [проблема XY] (http://www.perlmonks.org/?node=xy+problem) – EZI

+0

Ваш вопрос о XY. Я просто хочу сохранить боковую панель и сконцентрироваться на конкретной проблеме. Если даже возможно автоматизировать нажатия клавиш на виртуальной машине через C#. Чтобы запустить процесс при подключении к RDP, отключите его, и процесс продолжится. – JoeCM

ответ

0

При создании объекта процесса установить StartInfo соответствующим образом:

var proc = new Process { 
    StartInfo = new ProcessStartInfo { 
     FileName = "program.exe", 
     Arguments = "command line arguments to your executable", 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     CreateNoWindow = true 
    } 
}; 

затем начать процесс и читать из него:

proc.Start(); 
while (!proc.StandardOutput.EndOfStream) { 
    string line = proc.StandardOutput.ReadLine(); 
    // do something with line 
} 

Взятые из here

Вас послать что-нибудь может просто использовать:

proc.StandardInput.WriteLine("Something"); 

Вы можете просто проверить цикл while для некоторых триггеров и затем записать некоторые данные в поток.