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


(anton_matyushkin) #1

Добрый день.

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

 

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

 

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

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

 


(Дмитрий Жарий) #2

 

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

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


(anton_matyushkin) #3

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

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


(Дмитрий Жарий) #4

 

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


(anton_matyushkin) #5

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

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

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

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

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


(Дмитрий Жарий) #6

 

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

(igorl) #7
Попробуйте задержку небольшую сделать между вызовами Keyboard.SendKeys("C", ModifierKeys.Control); и Clipboard.GetText();
Вдруг поможет :)

(anton_matyushkin) #8

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

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