【问题标题】:Show a message box from a Windows Service显示来自 Windows 服务的消息框
【发布时间】:2010-05-07 06:22:07
【问题描述】:

您能否显示来自 Windows 服务的消息框(或任何形式的通知)?无法让它工作。我用过:

            global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " +
                ServiceName + " is now terminating.");

但它不起作用,只是产生了一个错误。

【问题讨论】:

    标签: windows-services messagebox


    【解决方案1】:

    不,您不能显示来自服务的消息框。如果您想报告错误,执行此操作的标准方法是使用event log。

    对于更多“高级”类型的 UI(不仅仅是错误报告),这通常是通过一个常规的 Windows 应用程序完成的,您将其放入用户的 Startup 文件夹(或注册表中的 Run 键)并进行对话通过某种 IPC 机制(.NET 远程处理、WCF、常规套接字、命名管道等)到服务。

    【讨论】:

    • 哦.. 我希望有一个通用的异常处理程序,它会在服务发生错误时通知用户。在某些情况下,它会静默崩溃,用户不会意识到服务已经崩溃。
    • 我在尝试调试时一直使用消息框。这是找出可能发生的问题的一种快速简便的方法。永远不要在发布中使用消息框!构建版本时始终使用事件日志!要使用消息框进行调试,只需将 System.Windows.Forms 引用添加到您的项目。
    • 我想通知用户我无法进行事件记录。但唯一的方法是通过记录事件?这很尴尬。
    【解决方案2】:

    您可以显示来自具有“WTSSendMessage(...)”功能的服务的消息(自Windows Vista 和Windows Server 2008 以来可用),这是一篇好文章: http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx

    【讨论】:

      【解决方案3】:

      来自Wikipedia:

      虽然服务通常没有用户界面,但开发人员可以添加表单和其他 UI 组件。在这种情况下,应在“服务属性”对话框的“登录”选项卡上选中“允许服务与桌面交互”(但应小心使用此方法,因为这可能会导致安全风险,因为任何登录用户将能够与服务交互)。

      启用此选项后,您应该能够显示来自服务的消息框。

      【讨论】:

      • @Jonn:我猜有一些 API 可以在代码中改变它,但通常不应该依赖这个选项。
      【解决方案4】:

      允许服务与桌面交互将帮助您从 Services.msc 控制台执行此操作。

      但是,这是一个非常糟糕的主意。特别是如果您稍后忘记删除此消息框。该服务将挂起,因为您将拥有一个任何人都无法点击的消息框。

      【讨论】:

        【解决方案5】:

        操作系统:XP 为 Windows 服务启用交互模式

        程序

        1. 打开服务控制面板。例如:开始 > 控制面板 > 管理工具 > 服务。
        2. 选择 Cast Iron Secure Connector 服务。
        3. 右键单击服务名称,然后选择“属性”。将显示“服务属性”窗口。
        4. 选择登录选项卡。
        5. 选择本地系统帐户,然后选择允许服务与桌面交互。
        6. 点击确定。
        7. 点击重启。

        【讨论】:

        • 这已经超过 10 年了。它在 Windows Vista 及更高版本中不受支持。
        【解决方案6】:

        不,你不能。 Windows 服务没有 GUI。但是您可以显示一些系统托盘通知。

        【讨论】:

        • 我认为你不能这样做,因为它们与桌面没有交互。
        • 你介意给我看一个例子吗?我还没有考虑过这种可能性。
        • @Jonn:我没有为自己做过这件事,但这可以帮助你:msdn.microsoft.com/en-us/magazine/cc188923.aspx。使用 P/Invoke 与操作系统对话。重要的是不要直接调用任何 GUI 组件,因为 Windows 服务不能有一个 GUI。
        猜你喜欢
        • 2019-10-17
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多