我需要一个在用户桌面上启动.exe的服务。我还需要此服务,以便在用户登录桌面后立即启动。 (Windows 7平台)
我确实有SENS活动,但不确定如何将上述难题放在一起。我也知道Runkey中的任何.exe都会在窗口启动时启动,但是如何将我的服务放入Runkey?
任何帮助都将不胜感激。
谢谢。
答案 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代码移动到在用户会话中运行的代理是很重要的。