繁体   English   中英

有什么方法可以从 Windows 7 上的 windows 服务启动 GUI 应用程序?

[英]Is there any way to start a GUI application from a windows service on Windows 7?

I have done a lot of searching to find a way to start a GUI application from a windows service on Windows 7. Most of what I have found is that with Windows 7 services now run in a separate user session and can not display any graphical interface给当前用户。 我想知道是否有任何解决方法或不同的方式来完成这样的事情? 该服务可以在不同的用户 session 中启动进程吗?

进行此更改是有原因的,而不仅仅是为了惹恼开发人员。 正确的方法是将您的 UI 放在不同的程序中,并通过管道或其他一些 IPC 机制与会话进行通信。 服务不呈现 UI 的建议已经有 10 多年的历史了。

您真的应该尝试遵循这些规则,即使开始时可能看起来不方便。 从好的方面来说,您将享受将服务逻辑和 UI 逻辑分开的好处

如果您的服务在 LOCALSYSTEM 帐户下运行,那么您可以选中“允许服务与桌面交互”,以便遗留服务在无法显示 UI 时会失败。 但无论如何它都无济于事,因为 UI 将在会话 0 中显示它从未见过!

我建议您阅读描述会话 0 隔离的 Microsoft官方文档

有一种方法可以做到这一点。 如果您需要显示一个简单的消息框,您可以使用 WTSSendMessage Routine。 如果你需要一个复杂的 UI 元素,你可以把它放在一个单独的程序中,你需要使用 CreateProcessAsUser Routine。 在微软提供的这个示例中,您可以看到该过程。

http://blogs.msdn.com/b/codefx/archive/2010/11/26/all-in-one-windows-service-code-samples.aspx

Windows 7 引入了所谓的“会话 0 隔离”,这实际上意味着每个服务(系统服务除外)都在单独的非交互式会话中运行。 出于这个原因,您不能直接从服务中创建 GUI,除非您通过标记Interact With Destop选项在传统模式下运行,如果您计划在未来几年运行您的服务,这并不好。

正如 David Heffernan 所说,最好是使用客户端-服务器架构。 WCF 使与命名管道通信变得容易。

这个页面是阅读 Session 0 Isolation 的一个很好的起点, 这个白皮书也非常好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM