【问题标题】:UIA InvokePattern.Invoke() throws exception when system is locked. (in .NET 4.5.2)UIA InvokePattern.Invoke() 在系统锁定时抛出异常。 (在 .NET 4.5.2 中)
【发布时间】:2015-09-03 11:57:41
【问题描述】:

一旦系统被锁定,调用 Invoke() 方法(来自 System.Windows.Automation.InvokePattern)就会失败。在将我们的项目迁移到 .NET 4.5.2 后可以看到这种行为。而在 .NET 4.0 中,即使系统被锁定,调用也能正常工作。

使用的dll是UIAutomationClient.dll,v4.0.0.0。

我得到的例外是:

System.InvalidOperationException 未被用户代码处理 Message=由于对象的当前状态,操作无效。

我知道使用 UIA 进行 GUI 测试通常需要解锁系统。由于此调用在系统锁定在 .NET 4.0 时有效,因此我希望在迁移后具有相同的行为。

【问题讨论】:

  • 你确定它与.NET版本有关吗?在相关代码中没有明确抛出InvalidOperationException,因此它很可能直接来自 COM 自动化 API。根据文档,The element does not support the InvokePattern control pattern or is hidden or blocked.,所以你正在做的事情绝对不受支持,而且从来没有。

标签: c# .net ui-automation uia


【解决方案1】:

根据文档,InvalidOperationException 被抛出时

该元素不支持 InvokePattern 控件模式或者被隐藏或阻止。

这一直追溯到 .NET 3.0,并且无论如何都没有真正由 .NET 端处理(它在底层 COM API 中),因此这不太可能与 .NET 版本有关。

【讨论】:

    【解决方案2】:

    我不建议在系统锁定时使用 GUI 做任何事情。在这种情况下,GUI 上下文会丢失。因此,您甚至根本无法以编程方式发送键盘或鼠标事件。但是您可以将远程桌面(或 VNC 服务器软件)会话保持在窗口模式下,非最小化,失去焦点。 GUI 上下文是活动的,您可以在另一个窗口中的本地计算机上与远程 PC 上的 GUI 自动化脚本并行工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2018-11-21
      • 2015-04-04
      • 2011-04-10
      • 2011-02-14
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多