2015-09-03 76 views
2

只要系统被锁定,调用Invoke()方法(从System.Windows.Automation.InvokePattern)就会失败。将我们的项目迁移到.NET 4.5.2后会看到此行为。而在.NET 4.0中,即使系统被锁定,调用也可以工作。当系统被锁定时,UIA InvokePattern.Invoke()会抛出异常。 (在.NET 4.5.2中)

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

我得到的例外是:

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

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

+0

您确定它与.NET版本有关吗?在相关的代码中没有任何明确地抛出'InvalidOperationException',所以它可能直接来自COM Automation API。根据文档,“元素不支持InvokePattern控件模式或隐藏或阻止”,所以你所做的绝对不被支持,从来没有。 – Luaan

回答

1

根据文档,InvalidOperationException是当

的元件不支持InvokePattern控制图案抛出或隐藏或阻塞。

这一直回到.NET 3.0,并不是真的由.NET端处理(它在底层的COM API中),所以这很不可能和.NET有关。版。

0

当系统被锁定时,我不会推荐对GUI做任何事情。在这种情况下,GUI上下文丢失。所以你甚至不能以编程方式发送键盘或鼠标事件。但是,您可以保持远程桌面(或VNC服务器软件)会话处于窗口模式,非最小化,失去焦点。 GUI上下文处于活动状态,您可以在远程PC上的GUI自动化脚本上并行处理另一个窗口中的本地计算机。