【问题标题】:Find status of Windows service from Java application?从 Java 应用程序中查找 Windows 服务的状态?
【发布时间】:2011-03-22 09:07:14
【问题描述】:

如何通过java程序检查windows服务的状态?

【问题讨论】:

标签: java windows-services


【解决方案1】:

在下面的示例中,您可以找到如何检查 windows 服务状态并可以解析以执行某些操作

import java.util.*;
import java.sql.*;
import java.io.*;
import java.text.*;
public class doscmd 
 { 
    public static void main(String args[]) 
      { 
        try 
         { 
           Process p=Runtime.getRuntime().exec("sc query browser"); 

BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); 

           String line=reader.readLine();
           while(line!=null) 
            { 
              if(line.trim().startsWith("STATE"))

               {

                if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("1"))
    System.out.println("Stopped");
else
    if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("2"))
        System.out.println("Startting....");
    else
        if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("3"))
            System.out.println("Stopping....");
        else
            if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("4"))
                System.out.println("Running");

  }
   line=reader.readLine(); 
   } 

 } 

 catch(IOException e1) { } 



   } 
 } 

【讨论】:

  • 上面的代码什么也没返回。调试时,它说访问被拒绝并且为空。
【解决方案2】:

至少您应该能够使用命令sc query service-name 启动 cmd.exe 进程并解析输出以确定状态。不漂亮,但缺少用于 Windows 服务管理器的 Java API,这将是一个可行的替代方案。

编辑 - 阅读 java.lang.ProcessBuilder 的 Javadoc,这将允许您执行外部命令。您可能应该设置 redirectErrorStream 属性,这样您就不必处理两个输入流(stdout 和 stderr),从而实现更简单的设计。

【讨论】:

  • 我用谷歌搜索了这个 sc 查询,它工作正常。你能告诉我如何从 java 运行这个查询吗?
  • 我编辑了我的答案以包含指向您需要执行此操作的 API 的指针。
【解决方案3】:

此方法将根据服务是否运行返回 true 或 false。

public boolean checkIfServiceRunning(String serviceName) {
    Process process;
    try {
         process = Runtime.getRuntime().exec("sc query " + serviceName);
         Scanner reader = new Scanner(process.getInputStream(), "UTF-8");
         while(reader.hasNextLine()) {
            if(reader.nextLine().contains("RUNNING")) {
               return true;
            }
         }
    } catch (IOException e) {
        e.printStackTrace();
    }            
    return false;
}

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多