有没有办法从Windows 7上的Windows服务启动GUI应用程序?

我已经做了大量的search,以find一种方法来从Windows 7上的Windows服务启动一个GUI应用程序。我发现的大部分是,现在Windows 7服务运行在一个单独的用户会话,不能显示任何graphics界面给当前用户。 我想知道是否有任何forms的解决方法或不同的方式来完成这样的事情? 服务可以在不同的用户会话中启动一个进程吗?

Solutions Collecting From Web of "有没有办法从Windows 7上的Windows服务启动GUI应用程序?"

这个改变是有原因的,而不是简单地让开发者烦恼。 正确的做法是把你的用户界面放在一个不同的程序中,并通过管道或其他IPC机制与会话进行通信。 服务不提供UI的建议现在已经超过10年了。

你应该尽量遵循这些规则,尽管开始时可能看起来不方便。 从好的一面来看,您将享受保持服务逻辑和UI逻辑分离的好处

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

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

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

正如David Heffernan所说,最好的方法是使用客户机 – 服务器体系结构。 WCF可以很容易地与命名管道进行通信。

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

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

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