2012-10-09 206 views
0

可能重复:
Loading GUI App from Windows Service在启动时启动服务并从服务启动应用程序?

我需要启动的.exe用户的桌面上的一个服务。只要用户登录到桌面,我也需要此服务才能启动。 (Windows 7平台)

我确实有SENS事件,但不确定如何将上述拼图放在一起。我也知道Runkey中的任何.exe会在窗口启动时启动,但我如何将我的服务放入Runkey?

任何帮助,将不胜感激。

谢谢。

回答

2

除了Windows服务之外,另一个选项是写入托盘应用程序,当用户以交互方式登录时,托盘应用程序将在托盘中启动。这消除了对始终运行的Windows服务的需求,并且必须检测何时发生登录。它将在登录时从托盘中开始,以它们的形式运行,并且您可以在托盘应用程序中提供gui以启动/停止服务。

这里是S.O.岗位:

How can I make a .NET Windows Forms application that only runs in the System Tray?

如果你想在交互未登录时,它总是甚至运行,那么Windows服务是要走的路。

0

从Vista开始,这不应该像这样完成,因为服务被设计为不能与桌面交互。这是关于这个主题的更深入的文件。

http://msdn.microsoft.com/en-us/windows/hardware/gg463353.aspx

通常情况下,你会把用户启动文件夹或类似桌面可执行程序,并将它与服务进行通信。

下面是影响你的那一段:

对于更复杂的交互,开发者应该将他们的UI代码到用户的会话中运行,并处理所有UI要求代理。代理通过RPC或命名管道与服务进行通信。如果用户使用控制面板,Internet Explorer或类似的UI体验启动UI交互,则该UI体验应启动代理。代理然后处理所有UI交互。如果UI是必需的,但不是由用户发起的,则服务必须请求代理启动任何所需的UI,而不是尝试单独启动该UI。在极少情况下,服务必须启动用户交互并且代理尚未运行,服务应调用CreateProcessAsUser API来启动代理。代理可以启动所有UI交互。开发人员仔细查看所有可能的使用场景并考虑将所有UI代码移动到在用户会话中运行的代理中,这一点非常重要。

+0

有没有一个例子如何做到这一点,因为我很无知:( – user1683517

+0

http://bloggingabout.net/blogs/dennis/archive/2010/06/16/wcf-simple-example-in-视觉工作室2010。aspx是一个制作自我托管的WCF服务的演练。这将由您的Windows服务托管。然后,您需要制作一个客户端应用程序(可能winforms,因为托盘图片功能在WPF中不受支持),它将使用WCF服务。 – spender

相关问题