使用ServiceNotification选项
本文关键字:选项 ServiceNotification 使用 | 更新日期: 2023-09-27 17:52:16
在Windows Vista及更高版本中,服务不能再访问GUI。然而,在编写了一个简单的机制将消息从我的服务传递到一个助手GUI应用程序之后,我发现System.Windows.Forms.MessageBox.Show
的以下过载,其中的"MessageBoxOptions"参数引起了我的注意:
public static DialogResult Show(
string text,
string caption,
MessageBoxButtons buttons,
MessageBoxIcon icon,
MessageBoxDefaultButton defaultButton,
MessageBoxOptions options
)
更仔细地观察枚举,其中一个有效的选项是MessageBoxOptions.ServiceNotification
,它在MSDN上声明:
活动桌面显示消息框。来电者是通知用户事件的服务。该函数显示消息框显示在当前活动的桌面上,即使没有用户已登录到计算机。
这是否意味着通过传递MessageBox.Show()
方法这个选项,我的服务实际上可以处理显示来自服务的简单消息,而不必在Vista, Windows 7和更高版本中使用helper应用程序?
MESSAGEBOXOPTIONS ENUM DEMYSTIFIED -适用于XP
从这里从Windows Vista及以上版本开始,无法看到Windows服务生成的用户界面。更糟糕的是,你的服务可能会等待一些用户输入,而用户无法输入,因为她看不到任何东西
要在windows服务中显示MessageBox,需要发送WTSSendMessage
消息。
是的,你的建议是可行的,但是你真的想这么做吗?记住,默认情况下MessageBox.Show()是一个阻塞操作。一般来说,让服务等待UI操作是一个非常糟糕的做法。
你的问题的答案是:"是的,但请不要。"
只有当您启动了"交互式服务检测"服务时,您的服务才能使用Show方法显示MessageBox。要启动此服务,请键入"services"。