Windows services 显示来自Windows服务的消息框

Windows services 显示来自Windows服务的消息框,windows-services,messagebox,Windows Services,Messagebox,您能否显示来自windows服务的消息框(或任何形式的通知)?不能让它工作。我用过: global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " + ServiceName + " is now terminating."); 但它不起作用,只是产生了一个错误。不,您不能显示来自服务的消息框。如果要报告错误,标准方法是使用 对于更“高级”的用户界面(不仅仅

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

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

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

不,您不能显示来自服务的消息框。如果要报告错误,标准方法是使用


对于更“高级”的用户界面(不仅仅是错误报告),通常是通过一个常规的windows应用程序来完成的,该应用程序放在用户的启动文件夹(或注册表中的运行键)中,并通过某种IPC机制(.NET remoting、WCF、常规套接字、命名管道等)与服务对话。

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

来自:

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


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

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


但是,这是一个非常糟糕的主意。特别是如果您以后忘记删除此messagebox。该服务将挂起,因为您将有一个没有人可以点击的消息框。

您可以使用“(…)”功能显示来自服务的消息(该功能自
Windows Vista
Windows Server 2008
开始提供),下面是一篇好文章: 操作系统:XP 为Windows服务启用交互模式

程序

  • 打开服务控制面板。例如:开始>控制面板>管理工具>服务
  • 选择铸铁安全连接器服务
  • 右键单击服务名称,然后选择属性。将显示“服务属性”窗口
  • 选择“登录”选项卡
  • 选择本地系统帐户,然后选择允许服务与桌面交互
  • 单击“确定”
  • 单击重新启动

  • 我不认为你可以这样做,因为他们与桌面没有交互。你介意给我举个例子吗?我还没有考虑过这种可能性。@Jonn:我还没有为自己做过这件事,但这可以帮到你:。使用P/Invoke与操作系统对话。不要直接调用任何GUI组件,这一点很重要,因为Windows服务在设计上不可能有GUI。。我希望有一个通用的异常处理程序,当服务发生错误时通知用户。在某些情况下,它会悄无声息地崩溃,用户不会意识到服务已经崩溃。我在尝试调试时总是使用消息框。这是一种快速简便的方法,可以找出可能发生的问题。不要在发布中使用消息框!构建发布时始终使用事件日志!要使用消息框进行调试,只需将System.Windows.Forms引用添加到您的项目中。我想通知用户我无法进行事件日志记录。但唯一的方法是通过记录事件?乔恩:我想代码中有一些API可以改变这一点,但一般来说,这个选项不应该被依赖。这已经有10年没用了。Windows Vista及更高版本不支持此功能。