Ошибка получения данных из буфера на виртуальной машине

Добрый день.

Столкнулся с проблемой при выполнении автотестов на виртуальной машине: в одном из методов не работает копирование в буфер обмена

 

Keyboard.SendKeys("C", ModifierKeys.Control);
string DateOfReceipt = Clipboard.GetText();
Assert.AreEqual(DateTime.Today.ToString() , DateOfReceipt + " 0:00:00");
При воспроизведении на моей локальной машине тест отрабатывает на ура, при запуске в виртуальной среде получаю ошибку:

 

Method выдал исключение: System.Runtime.InteropServices.ExternalException: Сбой при выполнении запрошенной операции с буфером обмена..

Кто-нибудь сталкивался с подобным?

 

 

Бывает иногда такое. Если вы используете Ctrl+C /Ctrlv+V то советую отключить интеграцию буфера с хост машиной.

Вероятно, когда скрипт эмулирует нажатие Ctrl-V на гостевой машине, то на самом деле виртуалка подсовывает  данные из буффера хост машины. 

отключить интеграцию буфера с хост машиной

как это сделать?

 

Эмм… ну в настройках самой виртуальной машины. Я знаю как это сделать в Virtual Box. Не знаю, какая у вас виртуалка.

Мы используем Hyper-V и SCVMM.

В настройках виртуальной машины на hyperv в разделе "Службы интеграции" отключил службу "Обмен данными".

В настройках виртуальной машины на SCVMM в разделе "Службы интеграции" тоже отключил службу "Обмен данными".

Правда при попытки прогнать тесты опять получили ошибку с буфером.

Так же на одной паре виртуалок через просмотр виртуальной машины на hyperv в "Действия" -> "Вставьте установочный диск служб интеграции" выполнил установку служб интеграции после чего контроллер тестирования перестал связывать агент тестирования с виртуальной средой, в следствии чего выполнять тесты в среде стало невозможно. Не знаете ли с чем это связано?

 

Хмм… такая ошибка происходит, когда буфер заблокирован. Причин может быть очень много. 
Вы можете попробовать импортировать WinAPI функцию для работы с буфером обмена:
http://stackoverflow.com/a/5945476/1126595
 
Также может возникнуть ошибка связанная с многопоточность. 
Есть следующий вариант решения:
http://stackoverflow.com/a/7636367/1126595
 
Попробуйте задержку небольшую сделать между вызовами Keyboard.SendKeys("C", ModifierKeys.Control); и Clipboard.GetText();
Вдруг поможет :)

В моем случае был косяк с буфером обмена винды (активация винды не помогла). Из ситуации вышел установив в виртуальной среде програмку "Clipboard manager" (Hot Copy Paste), правда она вроде как платная но 30-дневный триал у меня висит уже 4 дня и счетчик не отщитывает время к точке Х. Подобные бесплатные аналоги еще не смотрел, но думаю найти их можно.

P.S.: Может кому поможет сий комментарий.