在java中,有没有办法检查Windows服务的状态?

我正在寻找一个库,它将允许我查找Windows服务的状态,以validation服务是否已启动并正在运行。 我查看了Sigar库,但它是GPL,因此我无法使用它。 需要商业或BSD(ish)许可证,因为它将捆绑到商业软件中。

如果没有其他帮助,请尝试考虑一种稍微不同的方法(当然,如果可以的话),例如:

  • 有大量免费/非免费软件可以进行监控,包括Windows服务监控(例如nagios,Zabbix等)。 这些监视器通常具有开放API,您的Java应用程序可以通过多种不同方式集成到这些API中。
  • 如果您可以控制依赖服务应用程序,请为Java应用程序提供另一种不同的检查方式(例如,在端口上运行虚拟侦听器,创建文件等)。 Windows服务不是跨平台的事情,因此不会很快就会支持您。

我不认为有任何纯Java方法可以做到这一点,因为有些操作系统没有像Windows那样的“服务”概念。 在我们的项目中,我们编写了一个包装器,用于从命令行调用“sc”命令。 要获取服务的状态,您可以执行以下操作:

sc \\ some-computer query“我的服务名称”

您必须手动解析输出,但它非常简单。

我不知道任何库,但根据您需要获得的详细程度,您可能会使用一些shell命令并解析输出。

NET START服务名称

将启动该服务,或返回一条错误消息,告诉您它已经启动。 我不知道任何只会给你状态的命令。