代码之家  ›  专栏  ›  技术社区  ›  Maltrap

C#服务的视觉反馈

  •  1
  • Maltrap  · 技术社区  · 17 年前

    用C#编写的服务真的无法向桌面提供视觉反馈吗?

    我了解到,服务在用户登录之前启动,此时没有可用的桌面。那么,我的问题是,除了在系统事件日志中记录事件(这不是一种非常有效的与用户通信的方式)外,我还有什么其他方法来显示服务中的消息框?

    我只想到两个选择:

    请假设它需要显示出来,因为我不希望对“良好做法”做出回应。至少在这一点上不是。

    3 回复  |  直到 17 年前
        1
  •  4
  •   Daniel Brückner    17 年前

    windows服务不应与用户进行交互。相反,您应该创建一个单独的控件或配置应用程序(通常放在系统托盘中),与服务通信,并可以向用户呈现信息或收集输入。

    看这个 Knowledge Base article MSDN article 如果你真的想这么做。它们包含一些如何实现这一点的提示,您可能需要使用C#中的P/Invoke。

        2
  •  1
  •   JP Alioto    17 年前

    Here are some ways that you can make interactive services.

    让用户从服务中获取信息的一种方法是为此目的构建一个单独的UI。例如,该服务可以有一个WCF端点,并推送GUI将显示的消息。这样,您只在有用户登录时显示消息,并且从LocalSystem帐户弹出窗口不会带来安全风险。你可以很容易地让这个GUI从托盘和弹出式吐司中运行,这样它就不会打扰用户,并在用户登录时开始。这比直接与桌面交互要好得多。

        3
  •  1
  •   Aaron Daniels    17 年前

    我从未使用过它,我包括所有关于不这样做的免责声明。

    但是,您可能想查看 MessageBoxOptions.ServiceNotification 枚举。

    Here's a good blog post 详细说明其使用方法。