获取Windows服务的内部状态信息

6
我正在用.NET C#编写一个Windows服务,该服务将充当文件处理器。它会监听文件夹的创建事件,并将这些文件添加到队列中等待处理。另一个线程从队列中拉取文件并进行处理。
我的问题是是否有一种方法来查询Windows服务以获取其“状态”。我想能够以某种方式查询服务并查看当前在队列中等待处理的文件列表等信息。
我知道在Linux中可以通过/proc文件系统实现此功能,我想知道Windows是否有类似的东西。如果有任何提示/指针,将不胜感激。

你尝试过什么?- 看起来你可以简单地连接并将这些信息存储在数据库中,或者提供一个HttpListener来响应连接事件。 - Tejs
3个回答

3

如果您正在寻找一种非UI方法(例如将名称写入文件或标准输出),则可以在服务上使用ExecuteCommand方法。

  ServiceController sc = new ServiceController("ServiceName");
  sc.ExecuteCommand(255);

这只是将此命令传递给您的服务,并且您的服务将通过OnCustomCommand处理它。
protected override void OnCustomCommand(int command)
{
  base.OnCustomCommand(command);
  if (command == 255
  {
      ... // Your code here
  }
}

您可能需要将队列/服务状态存储在静态变量中,以便您可以从OnCustomCommand例程中访问它。

1
完美。这个非UI方法正是我所寻找的。更多相关信息请参见此处。http://arcanecode.com/2007/05/30/windows-services-in-c-sending-commands-to-your-windows-service-part-7/ - Chris Sansone

2

我感谢sgmoore对我的问题的贡献,因为他的回答更符合我所寻找的。尽管如果有时间,我也可能会探索你的建议。感谢你指引方向。我不知道在Windows服务中所有这些都是可能的。 - Chris Sansone

0

使用WCF会很好,特别是它可以托管在Windows服务中。也许在你的情况下,使用XML-RPC with WCF是有意义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接