Есть ли способ принять запросы UAC с QTP?

Я создал автоматический тест, который должен запускать исполняемый файл (в данном случае скрипт удаления). Это приводит к тому, что Windows 7 отображает приглашение контроля учетных записей, которое необходимо принять перед продолжением теста QTP.

В нынешнем виде мне пришлось понизить UAC до уровня "не уменьшать яркость моего рабочего стола", чтобы даже добавить диалоговое окно в репозиторий объектов. Я попытался записать, нажав кнопку Да, но QTP не заметил моих действий, поэтому мне пришлось добавить объект вручную.

Даже тогда, когда я добавляю строку Dialog("User Account Control").WinButton("Yes").Click, Я получил Unspecified Error из QTP.

Редактировать: я также пытался использовать код ниже, чтобы нажать на произвольную точку на экране (где кнопка "Да" просто случайно).

Set dr = CreateObject("Mercury.DeviceReplay")
dr.MouseClick 1030, 550, LEFT_MOUSE_BUTTON

Хорошей новостью является то, что курсор попадает прямо на кнопку "Да", к сожалению, щелчок не работает.

Есть ли способ для QTP принять приглашение UAC, не отключая UAC вообще?

1 ответ

Решение

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

Windows предотвращает программный щелчок приложений в диалоговом окне " Согласие ". Это сделано для предотвращения так называемой Shatter Attack. Кроме того, если коду было разрешено увидеть и щелкнуть диалоговое окно согласия UAC, вредоносная программа могла бы щелкнуть само приглашение UAC.

Существует механизм, позволяющий программам объявлять, что они должны иметь возможность управлять пользовательским интерфейсом; позволяя программному обеспечению увидеть и нажать на диалоговое окно UAC. Это достаточно серьезный риск для безопасности, так что приложение должно:

  • иметь цифровую подпись
  • запускаться из программных файлов

Объявите, что вам нужно право

Если вы попросите разработчиков QTP изменить их манифест сборки; включение **uiAccess=true** опция:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <!-- Disable Windows Vista UAC compatability heuristics -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="true"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly>

и затем они подписывают цифровую подпись исполняемого файла QTP, а затем устанавливают его в Program Files, после чего он сможет щелкнуть диалоговое окно UAC.

Бонус Чтение

Из Криса Джексона " Использование атрибута uiAccess для требуемого уровня выполнения для улучшения приложений, обеспечивающих удаленное управление рабочим столом":

Теперь большинство людей не совсем понимают, для чего это нужно, и манифест UAC, как правило, является просто делом копирования / вставки. Но разработчик удаленного рабочего стола обращает на это внимание. Для любого обычного программного обеспечения вы, как правило, хотите держаться подальше от него - это опасно и обходится без существенной функции безопасности (UIPI). Но если вы используете удаленный рабочий стол, это именно то, что вы хотите - вы должны видеть все!

На самом деле это достаточно опасно, что мы не позволим вам установить его без цифровой подписи вашего приложения. По умолчанию вы также должны установить его в безопасном месте (например, Program Files).

Другие вопросы по тегам