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

时间:2012-05-21 17:54:46

标签: c# .net windows service state

我有一个用.NET C#编写的Windows服务。该服务将充当文件处理器。它只是查看File Created事件的目录,并将这些文件添加到队列中进行处理。一个单独的线程从队列中提取文件并处理它们。

我的问题是,是否有办法查询Windows服务以获取其“状态”。我希望能够以某种方式查询服务,并查看当前在队列中等待的文件列表等。

我知道这可以通过/ proc文件系统在Linux中完成,我想知道Windows是否有类似内容。任何提示/指示将不胜感激。

3 个答案:

答案 0 :(得分: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 :(得分:2)

您可以使用访问该状态所需的任何方法在Windows服务内创建托管WCF服务。

http://msdn.microsoft.com/en-us/library/ms733069.aspx

答案 2 :(得分:0)

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

可能是有意义的