当前位置: 首页 > 面试题库 >

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

安聪
2023-03-14
问题内容

情况如下:

我曾被要求使用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是一个私有html" target="_blank">方法,它将给定的字符串作为命令行进程运行,并返回结果输出。正如我所说的,丑陋,但可行。希望这可以帮助。



 类似资料:
  • 问题内容: 我正在寻找一个允许我查找Windows服务状态以验证该服务已启动并正在运行的库。我查看了Sigar库,但是它是GPL,因此我无法使用它。需要商业或BSD(ish)许可,因为它将被捆绑到商业软件中。 问题答案: 如果没有其他帮助,请尝试考虑稍微不同的方法(当然可以),例如: 有许多免费/非免费软件可以进行监视,包括Windows服务监视(例如nagios,Zabbix等)。这些监视器通常

  • 问题内容: 我正在使用Go应用程序,该应用程序使用Go Docker SDK启动一些Docker容器。我需要检查容器的进程是否以零(成功)状态代码退出。 这是最小的工作示例: 如您所见,容器中的进程以非零状态()结尾。但是,它不会记录任何致命错误,只会在构建和执行时显示: 如何使用Docker Go SDK检查以非零状态退出的容器进程? 问题答案: 我认为您应该使用状态通道来获取退出代码。错误通道

  • 问题内容: 我正在做一个项目,我们在Java服务和以其他各种语言编写的客户端之间进行大量的远程对象传输。考虑到我们当前的限制,我决定查看基于现有Java类生成代码所需要的内容。基本上,我需要获取一个文件(或它们的集合)来解析字节码,以确定所有数据成员,甚至可能是getter / setter,然后编写一些可以输出不同语言代码的内容,以创建具有相同结构的类。 我不是在寻找像JAD这样的标准反编译器。

  • 因此,我使用下面的代码作为尝试自动启动Appium服务器,但获得连接被拒绝:连接错误。我正在使用Maven和Testng 日志:

  • 问题内容: 目标 :在计算机上检查Java的版本(我可以从中获取)。将其与Java网站上提供的最新版本进行比较 我想知道是否可以通过某种方法检查最新的Java版本,前提是我已在计算机上安装了JRE / JDK。 如果我可以通过Java本身做到这一点,那么我的解决方案将变得与平台无关。我可以使用类向Java网站发送请求并获取HTML,但是响应会是动态的,因为Oracle可以更改其网站和样式,并且从长