2015-09-03 29 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自動化腳本上並行處理另一個窗口中的本地計算機。