6

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

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

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

4

3 回答 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 例程访问它。

于 2012-05-21T18:40:33.017 回答
2

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

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

于 2012-05-21T18:05:22.233 回答
0

WCF 会很好地做到这一点,尤其是它可以托管在 Windows 服务中。可能在您的情况下,将XML-RPC 与 WCF一起使用是有意义的

于 2012-05-21T18:16:17.630 回答