java - 需要一种以编程方式检查 Windows 服务状态的方法

标签 java command-line windows-services

情况是这样的:

我被要求使用 InstallAnywhere 8,这是一种基于 Java 的安装程序 IDE,允许启动和停止 Windows 服务,但没有内置方法来查询它们的状态。幸运的是,它允许您在 Java 中创建可以在安装过程中随时调用的自定义操作(通过我认为是相当复杂的 API)。

我只需要一些东西来告诉我特定服务是启动还是停止。

IDE 还允许调用批处理脚本,所以这也是一个选项,尽管一旦脚本运行,几乎没有办法验证它是否成功,所以我试图避免这种情况。

欢迎任何建议或批评。

最佳答案

这是我必须做的。它很丑,但效果很好。

String STATE_PREFIX = "STATE              : ";

String s = runProcess("sc query \""+serviceName+"\"");
// check that the temp string contains the status prefix
int ix = s.indexOf(STATE_PREFIX);
if (ix >= 0) {
  // compare status number to one of the states
  String stateStr = s.substring(ix+STATE_PREFIX.length(), ix+STATE_PREFIX.length() + 1);
  int state = Integer.parseInt(stateStr);
  switch(state) {
    case (1): // service stopped
      break;
    case (4): // service started
      break;
   }
}

runProcess 是一个私有(private)方法,它将给定的字符串作为命令行进程运行并返回结果输出。正如我所说,丑陋,但有效。希望这会有所帮助。

关于java - 需要一种以编程方式检查 Windows 服务状态的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/334471/

相关文章:

java - 找不到合适的驱动程序来连接 MySql openshift

java - 如果密码使用MD5加密,如何在服务器端验证java中的密码规则?

.net - 如何检测直接进入停止状态而没有错误的 .net 服务的问题

java - 如何将 .NET Windows 服务应用程序迁移到 Linux

java - 用于处理并发用户的多线程 GAE servlet

java - 从 Linked hashMap 派生时数组的顺序是什么?

shell - head 命令在 MAC OSX 上跳过文件的最后几行

windows - 如何仅为当前操作系统 session 设置变量

batch-file - 批量解析字符串输出

c# - 如何使用 "Local Service"而不是 "Local System"?