2009-12-21 63 views
5

我已经看到一些作为Windows服务运行的应用程序,但仍然可以提供允许用户查看实际正在进行的GUI。Windows Service Plus GUI/C#

例如,我们有一个windows服务来构建报告。有许多管理员希望看到的统计信息,例如有多少报告在排队,有多少内存正在使用,平均构建时间等。

我们想要做的是提供一种方法让管理员看到这一点 - 比如可以连接到窗口服务来收集和显示这些信息的应用程序......或者应用程序本身可以提供自己的GUI并在请求时显示它的方式。目前,该应用程序的唯一功能是创建日志文件。

有没有办法做到这一点?

回答

8

几个。

  1. 有某种组件挂钩到您的Windows服务中,并通过远程将信息发送到另一个应用程序。如果你有一个IoC容器,巧妙的使用装饰器可以做到这一点
  2. 使用服务总线,MSMQ,WCF,Growl或类似的东西来传播有趣的信息。应用程序只需要知道如何挂钩。
  3. 公开一个HTTP端点或一些地方有人可以连接到并下载Windows服务
  4. 信息或简单地创建一个单页的WinForms应用程序,读取日志文件中的每个这样经常显示有趣的结果。

(请注意,最后一个是目前为止最简单的 - 暗示暗示,这样做)

+0

谢谢 - 我安装了远程处理。它最终比选项#4更容易...解析文本文件糟透了:) – bugfixr 2009-12-21 23:06:15

0

理想情况下,服务与用户界面完全分离,原因很多,我不会介入。

但是,您可以使用某种方式的IPC来查看诸如此类的信息。我的建议是使用Remoting来请求服务所需的数据,然后根据需要将任何报告或图形构建到单独的应用程序中。

+0

我建议WCF而不是远程处理。从设计角度来看,Remoting紧密耦合并可能导致版本问题(与远程端点相比,限制对WCF服务的访问更容易);从技术角度来看,Remoting是一种垂死的技术,被WCF所取代。 – itowlson 2009-12-21 21:27:54

0

服务不允许进行UI API调用(除了消息框的一个具体形式)。所以看起来有一个接口的服务实际上是两个进程。服务进程正在使用某种专有反向通道与标准Windows应用程序通信。可能是一个命名管道,套接字或一大堆命名的共享内存。