您可以从Windows服务中显示消息框(或任何形式的通知)吗?无法让它发挥作用。我用了:
global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " +
ServiceName + " is now terminating.");
但它不起作用,只是产生了一个错误。
不,您无法显示服务中的消息框。如果要报告错误,执行此操作的标准方法是使用event log。
对于更多“高级”类型的UI(不仅仅是错误报告),通常这样做的方式是通过您放入用户的Startup文件夹(或注册表中的Run键)并与服务进行通信的常规Windows应用程序通过某种IPC机制(.NET远程处理,WCF,常规套接字,命名管道等)。
您可以使用“WTSSendMessage(...)”函数显示来自服务的消息(自Windows Vista
和Windows Server 2008
以来可用),这是一篇很好的文章:http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx
来自Wikipedia:
虽然通常服务没有用户界面,但开发人员可以添加表单和其他UI组件。在这种情况下,应该在“服务属性”对话框的“登录”选项卡上检查“允许服务与桌面交互”(尽管应该注意这种方法,因为这会导致安全风险,因为任何登录用户都可以与服务互动)。
启用此选项后,您应该能够显示服务中的消息框。
允许服务与桌面交互将帮助您从Services.msc控制台执行此操作。
但是,这是一个非常糟糕的主意。特别是如果您以后忘记删除此消息框。该服务将挂起,因为您将有一个没有人可以点击的消息框。
操作系统:XP为Windows服务启用交互模式
程序
不,你不能。 Windows服务没有GUI。但是您可以显示一些系统托盘通知。