2016-11-23 115 views
0

我有一個應用程序使用UI自動化API與其他WPF應用程序工作。 我創建了使用相同的功能,但是當服務嘗試查找窗口HWD收到NULL Windows服務:WPF UI自動化:從Windows服務

System.ArgumentException:HWND不能IntPtr.Zero或空。
在System.Windows.Automation.AutomationElement.FromHandle(IntPtr的HWND)
在MyService.Scheduler.GetNotificationWindow(IntPtr的hWndtoolBar)

是否可以使用UI自動化API在Windows服務?

+1

我不認爲這是可能的或容易實現,因爲[會話0隔離](https://blogs.technet.microsoft。 com/askperf/2007/04/27/application-compatibility-session-0-isolation /) – lokusking

回答

0

Windows服務無法訪問用戶的桌面。見:Interaction between Windows service and desktop application

所以簡短的回答是:不。

解決方案可能是讓服務通過套接字與桌面上的進程「通話」,並讓該進程執行自動化。 (這可能會導致擺脫服務,並將所有邏輯移動到桌面應用程序)

+0

我只考慮服務,因爲它在OS重新啓動時啓動。可能更容易創建一個小的「愚蠢的」服務,如果該服務不活動,它將檢查並運行該應用程序。這個應用程序使用UIAtomation API,並像現在一樣工作。 – Oleg

+0

使隱藏在系統托盤中的應用程序更容易,並從用戶登錄開始。這樣你就不會在你的機器上有一個間諜應用程序試圖窺視用戶的桌面。 –