Тестирование процедуры установки программы, требующей прав администратора - PullRequest
3 голосов
/ 13 мая 2010

Я пытаюсь написать автоматический тест, чтобы убедиться, что установщик моей программы работает нормально.

Программа может быть установлена ​​для всех пользователей (требуются права администратора) или для текущего пользователя (не требуются права администратора). Программа также может автоматически обновляться, что в некоторых случаях требует прав администратора, а в некоторых - нет.

Я ищу способ, которым можно было бы выполнить автоматический тест, нажав «Да, разрешить» в диалоговых окнах UAC, чтобы я мог писать тесты для всех различных сценариев во многих различных операционных системах, чтобы быть уверенным когда я внесу изменения в установщик, чтобы я ничего не сломал.

Очевидно, что сам процесс установки не может этого сделать. Тем не менее, я управляю всей машиной и могу легко запустить какой-то процесс-демон с правами администратора, к которому тестовая программа может установить сокет-соединение, чтобы запросить его «пожалуйста, нажмите ОК на UAC сейчас».

Ответы [ 4 ]

4 голосов
/ 15 мая 2010

Я действительно понял, как это сделать, пытаясь ответить на аналогичный вопрос о UAC. Вот что вы можете сделать:

  1. Написать сервис, который работает как SYSTEM.
  2. Откройте токен процесса экземпляра winlogon.exe, запущенного в сеансе входа в систему.
  3. Используйте этот токен для запуска вспомогательного процесса на рабочем столе Winlogon через CreateProcessAsUser.

На этом этапе у вас есть вспомогательный процесс, выполняющийся как SYSTEM в сеансе входа в систему на защищенном рабочем столе Winlogon. Отсюда вы можете использовать какой-то механизм IPC для связи между вашей автоматизированной тестовой программой и вспомогательным процессом. Во вспомогательном процессе вы можете EnumDesktopWindows найти приглашение UAC. Это насколько я понял; На самом деле я не пытался имитировать нажатие кнопки «Да» или «Нет», но не вижу причин, по которым это не сработает. Кроме того, я тестировал только на Windows 7 32-битной; Я считаю, что архитектура UAC идентична Vista, но я не тестировал ее.

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

РЕДАКТИРОВАТЬ: просто как продолжение я добавил код, чтобы использовать FindWindow (), чтобы найти кнопку «Да», и я смог успешно отправить ей сообщение BM_CLICK; запрос UAC пропал, и приложение было разрешено запустить.

0 голосов
/ 14 мая 2010

Наименее плохое решение, которое я нашел до сих пор, - это запуск тестов в сеансе VMWare и управление мышью / клавиатурой через vmware sdk. Хотелось бы услышать о других решениях

0 голосов
/ 14 мая 2010

Удаленный рабочий стол или запуск его в качестве гостевой виртуальной машины (с использованием Virtual PC или чего-либо другого, просто не загружайтесь с него.) Это также лучший способ сделать снимок экрана или видео с приглашением UAC.

0 голосов
/ 13 мая 2010

Альтернативным решением может быть выключение UAC

...