我创建了一个需要运行可执行文件(在本例中为卸载脚本)的自动测试。这会导致 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)。但是,如果您要远程处理桌面,那正是您想要的 - 您需要能够看到所有内容!
事实上,这已经足够危险了,我们不允许你在不对应用程序进行数字签名的情况下进行设置。默认情况下,您还必须将其安装在安全位置(如程序文件)。