2009-04-24 99 views
1

用C#编写的服务无法向桌面提供视觉反馈是真的吗?来自C#服务的视觉反馈

据我所知,服务在用户登录前启动,在这一点疗法没有可用的桌面。我的问题是,除了在系统事件日志中记录事件,这不是与用户进行通信的非常有效的方式之外,我还有什么替代方法来显示服务中的消息框?

只有两个选项浮现在脑海中:

  1. MessageBox.Show - 环顾四周,似乎这不会是一个选项。
  2. 显示自定义表单

我还没有给出为什么这个消息框需要显示的原因。 请认为它需要显示,因为我不想对“良好做法”做出回应。至少在这一点上。

回答

4

Windows服务不应该与用户进行交互。相反,您应该创建一个单独的控制或配置应用程序 - 通常放在系统托盘中 - 与服务进行通信,向用户呈现信息或收集输入。

看到这个Knowledge Base articleMSDN article如果你真的想这样做。他们包含一些提示如何实现这一点,你可能需要使用C#中的P/Invoke。

1

Here are some ways that you can make interactive services.但是,那些已经与Vista消失。你可以有一个用户得到服务信息

一种方式是打造为目的的独立的UI。例如,该服务可能有一个WCF端点,并将GUI显示的消息推送出去。这样,当用户登录时只显示一条消息,并且通过从LocalSystem帐户弹出一个窗口,这不是安全风险。您可以轻松地从托盘中运行此GUI并弹出烘烤面包,因此它非侵入式,并在用户登录时开始,这比尝试直接与桌面进行交互要好得多。

1

我从来没有使用过它,并且包括了关于不这样做的所有免责声明。

但是,您可能要检查出MessageBoxOptions.ServiceNotification枚举。

Here's a good blog post详细介绍它的使用。