启动时启动服务并从服务启动应用程序?

时间:2012-10-09 23:51:22

标签: c# service

  

可能重复:
  Loading GUI App from Windows Service

我需要一个在用户桌面上启动.exe的服务。我还需要此服务,以便在用户登录桌面后立即启动。 (Windows 7平台)

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

任何帮助都将不胜感激。

谢谢。

3 个答案:

答案 0 :(得分:2)

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

这是S.O.交:

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

如果您希望它即使在未以交互方式登录时也始终运行,那么Windows服务就是您的选择。

答案 1 :(得分:0)

您需要Windows服务,请检查http://msdn.microsoft.com/en-us/library/zt39148a%28v=vs.80%29.aspx。在服务中,您需要在用户登录时进行检测:how to detect windows started or user login in c#(.net) windows service?

答案 2 :(得分: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代码移动到在用户会话中运行的代理是很重要的。