【问题标题】:Launching Service on startup and launching App from Service? [duplicate]在启动时启动服务并从服务启动应用程序? [复制]
【发布时间】:2012-10-10 08:31:23
【问题描述】:

可能重复:
Loading GUI App from Windows Service

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

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

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: c# service


    【解决方案1】:

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

    这是一个 S.O.帖子:

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

    如果您希望它在未交互登录的情况下也始终运行,那么 Windows 服务就是您的最佳选择。

    【讨论】:

      【解决方案2】:

      您将需要 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?

      【讨论】:

        【解决方案3】:

        从 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 代码移动到在用户会话中运行的代理中是很重要的。

        【讨论】:

        • 有没有一个例子说明如何做到这一点,因为我一无所知:(
        • bloggingabout.net/blogs/dennis/archive/2010/06/16/… 是制作自托管 WCF 服务的演练。这将由您的 Windows 服务托管。然后,您需要制作一个使用 WCF 服务的客户端应用程序(可能是 winform,因为 WPF 中不支持托盘图标功能)。
        猜你喜欢
        • 1970-01-01
        • 2015-07-22
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        相关资源
        最近更新 更多