2016-11-23 111 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

使隐藏在系统托盘中的应用程序更容易,并从用户登录开始。这样你就不会在你的机器上有一个间谍应用程序试图窥视用户的桌面。 –