有没有办法使用 QTP 接受 UAC 提示



我创建了一个需要运行可执行文件(在本例中为卸载脚本)的自动测试。这会导致 Windows 7 显示用户帐户控制提示,需要接受该提示才能继续 QTP 测试。

就目前而言,我不得不将 UAC 降低到"不使我的桌面变暗"级别,以便将对话框添加到对象存储库。我尝试单击"是"按钮进行录制,但 QTP 没有注意到我的操作,所以我不得不手动添加对象。

即便如此,当我添加行Dialog("User Account Control").WinButton("Yes").Click时,我也会收到来自 QTP 的Unspecified Error

编辑:我还尝试使用下面的代码单击屏幕上的任意点("是"按钮恰好在)。

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

好消息是光标直接落在"是"按钮上,不幸的是单击不起作用。

QTP 有没有办法在不完全禁用 UAC 的情况下接受 UAC 提示?

我不知道 QTP 是什么,但问题是它试图单击不允许的按钮。

Windows 阻止应用程序以编程方式单击"同意"对话框。这样做是为了防止所谓的破碎攻击。此外,如果允许代码查看并单击 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 可执行文件进行数字签名,然后将其安装在程序文件中,然后它将能够单击 UAC 对话框。

奖金阅读

摘自 Chris Jackson 的 使用 requestExecutionLevel 的 uiAccess 属性来改进提供桌面远程控制的应用程序

现在,大多数人并不真正了解这是做什么的,UAC 清单通常只是一个复制/粘贴事件。但是远程桌面开发人员需要注意它。对于任何常规软件,您通常都希望远离它 - 它很危险,并且回避了重要的安全功能(UIPI)。但是,如果您要远程处理桌面,那正是您想要的 - 您需要能够看到所有内容!

事实上,这已经足够危险了,我们不允许你在不对应用程序进行数字签名的情况下进行设置。默认情况下,您还必须将其安装在安全位置(如程序文件)。

最新更新