::FindWindow 从服务应用程序失败
Posted
技术标签:
【中文标题】::FindWindow 从服务应用程序失败【英文标题】:::FindWindow fails from Service application 【发布时间】:2008-12-04 10:17:21 【问题描述】:从服务应用程序调用 Windows API ::FindWindow 函数失败。 GetLastError() 也返回 0(成功?)。这是一些特权\访问权问题吗?你认为这是设计问题,我应该使用另一种 IPC 方法吗?
【问题讨论】:
是的,这是一个设计问题。你肯定需要使用IPC机制,而不是在windows上操作。 【参考方案1】:leppie 说得对,Windows 服务在与桌面交互时通常会被拒绝。您可以在 XP 和更早版本中绕过它,但在 Vista 及更高版本中无法做到这一点。您最好将桌面和用户交互委托给 GUI 应用程序。有关详细信息,请参阅此document。
【讨论】:
【参考方案2】:服务在会话 0 中运行。在 XP 和更早版本上,第一个登录的用户也在会话 0 中运行,后续用户在会话 1 和更高版本中运行。如果该服务设置为“与桌面交互”,则它可以访问在会话 0 中运行的任何用户窗口。但是,从 Vista 开始,用户不再在会话 0 中运行。 FindWindow() 仅在调用它的 Session 的上下文中有效,因为无法跨 Session 边界访问窗口。
【讨论】:
以上是关于::FindWindow 从服务应用程序失败的主要内容,如果未能解决你的问题,请参考以下文章
windows service调用FindWindow 怎么不行