2011-03-22 37 views
5

Cách kiểm tra trạng thái của các dịch vụ windows từ một chương trình java?Tìm trạng thái dịch vụ Windows từ ứng dụng Java?

+1

thể trùng lặp của [Có cách nào, trong java, để kiểm tra về tình hình một dịch vụ cửa sổ?] (http://stackoverflow.com/questions/127299/is-there-any-way-in-java-to-check-on-the-status-of-a-windows-service) –

+0

@ Péter Török: Đây có thể là một câu hỏi có thể có của câu hỏi, nhưng không có câu trả lời nào cho câu hỏi đó được đề cập đến trong câu trả lời dựa trên ProcessBuilder tương đối đơn giản mà tôi đã cung cấp. –

Trả lời

2

Ít nhất bạn cũng có thể khởi chạy quy trình cmd.exe bằng lệnh sc query service-name và phân tích đầu ra để xác định trạng thái. Không đẹp, nhưng thiếu một API Java cho trình quản lý dịch vụ Windows, đây sẽ là một giải pháp thay thế khả thi.

EDIT - Đọc Javadoc cho java.lang.ProcessBuilder, cho phép bạn thực thi lệnh bên ngoài. Có lẽ bạn nên đặt thuộc tính chuyển hướng ErrorStream để bạn không phải xử lý hai luồng đầu vào (stdout và stderr), làm cho thiết kế đơn giản hơn nhiều.

+0

tôi đã googled truy vấn này sc, và hoạt động của nó fine.can bạn hãy cho tôi biết rằng làm thế nào tôi có thể chạy truy vấn này từ java? –

+0

Tôi đã chỉnh sửa câu trả lời của mình để bao gồm một con trỏ tới API bạn sẽ cần thực hiện việc này. –

9

trên ví dụ sau đây bạn có thể tìm thấy làm thế nào bạn có thể kiểm tra trạng thái dịch vụ Windws và bạn có thể phân tích cú pháp để làm hành động nhất định

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) { } 



    } 
} 
+0

câu trả lời hay được trả lời .. – bluelurker

+0

Mã trên không trả về gì cả. Khi gỡ lỗi, nó nói truy cập bị từ chối và null. –

Các vấn đề liên quan