2

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

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

即使那样,当我添加 line 时,我也会从 QTPDialog("User Account Control").WinButton("Yes").Click收到。Unspecified Error

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

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

好消息是光标正好落在“是”按钮上,不幸的是点击不起作用。

QTP 有没有办法接受 UAC 提示,而不完全禁用 UAC?

4

1 回答 1

3

我不知道 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 对话框。

奖金阅读

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

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

事实上,这很危险,我们不允许您在没有对您的应用程序进行数字签名的情况下进行设置。默认情况下,您还必须将其安装在安全位置(例如 Program Files)。

于 2014-01-03T03:54:58.760 回答