- PVSM.RU - https://www.pvsm.ru -
Допустим, мы выбрали удовлетворяющий нас инструмент(и тут я имею в виду не только ту штуку из прошлой статьи [1], но и вменяемые инструменты навроде TFS etc), даже заставили его делать какую-то часть работы за нас. Мы смогли автоматизировать установку продукта и вот уже казалось, что счастье, оно — вот, протяни руку и… обнаружь, что на последнем этапе инсталляции нам необходимо пережить перезагрузку системы. А может быть даже в последствии загрузиться под ограниченной учетнойдоменнойпрочей записью. А если не повезло настолько, что Ваш продукт — изменяет msgina.dll, то… да-да, я имею в виду, что нам надо влезть под winlogon и автоматизировать вход учетной записи.
Казалось бы — что может нас остановить? Создадим службу, стартующую после перезагрузки, которая оживит процесс с нужным автотестом, а он уже прочтет из файлика — под каким пользователем загрузиться и сделает всю работу.
Как и задумано, я создал службу, посмотрел, что она может запускать команду
ping localhost > c:outping.txt
сразу после перезагрузки, до входа в систему. Заменил ping на свой автотест и ничего не сработало. Службы которые могут запуститься до первого входа в систему запускаются от имени системной учетной записи localsystem и не могут быть интерактивными. Это значит, что будучи запущенным мой автотест не получил объекта системы, который описывает отображаемые на экране окна, так называемый desktop. Суть в том, что в системе windows существует три области в которые можно отображать окошки — default(грузится после ввода логинапароля), winlogon(отображает всем знакомый запрос аутентификации) и невидимая область для неинтерактивных служб.
Переключение между этими областями можно осуществлять вызовом функции winapi SetThreadDesktop [3]

Ок, подумал кодер- всего-то надо вызвать одну функцию winapi, стартануть свой автотест, ну и скомпилить статической линковкой, чтоб тестер не мучился с зависимостями. Ок, подумал тестер, всего-то теперь надо будет проверить на всех системах еще и прогу для запуска прог. Нельзя же не тестировать инструмент тестирования. Однако я не пошел по этому пути — с недавних пор при встрече с непонятными вещами в поведении Windows и грозящем изобретении велосипедов я стал прибегать к построению запроса к гуглу, начинающегося с фамилии Русинович. Это сработало и в этот раз. Нас выручит PSexec [4].
"полный\путь\к_psexec\PSexec.exe /x /s /d /accepteula cmd.exe". Автор: irony_iron
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/46757
Ссылки в тексте:
[1] прошлой статьи: http://habrahabr.ru/post/197586/
[2] это: http://technet.microsoft.com/ru-ru/library/cc780332%28v=ws.10%29.aspx
[3] SetThreadDesktop: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686250%28v=vs.85%29.aspx
[4] PSexec: http://technet.microsoft.com/ru-ru/sysinternals/bb897553.aspx
[5] srvAny: http://support.microsoft.com/kb/137890/ru
[6] Источник: http://habrahabr.ru/post/199234/
Нажмите здесь для печати.