使用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应用程序?

使用ServiceNotification选项

MESSAGEBOXOPTIONS ENUM DEMYSTIFIED -适用于XP

从Windows Vista及以上版本开始,无法看到Windows服务生成的用户界面。更糟糕的是,你的服务可能会等待一些用户输入,而用户无法输入,因为她看不到任何东西

从这里


要在windows服务中显示MessageBox,需要发送WTSSendMessage消息。

显示会话0特殊桌面的对话框。

是的,你的建议是可行的,但是你真的想这么做吗?记住,默认情况下MessageBox.Show()是一个阻塞操作。一般来说,让服务等待UI操作是一个非常糟糕的做法。

你的问题的答案是:"是的,但请不要。"

只有当您启动了"交互式服务检测"服务时,您的服务才能使用Show方法显示MessageBox。要启动此服务,请键入"services"。