2008-09-24 32 views
5

Tôi đang tìm thư viện cho phép tôi tra cứu trạng thái của dịch vụ windows để xác minh rằng dịch vụ đã được bắt đầu và đang chạy. Tôi nhìn vào thư viện Sigar, nhưng đó là GPL và tôi không thể sử dụng nó. Giấy phép Thương mại hoặc BSD (ish) là bắt buộc vì điều này sẽ được đưa vào phần mềm thương mại.Có cách nào, trong java, để kiểm tra tình trạng của một dịch vụ windows?

Trả lời

4

Nếu không có gì khác giúp, hãy cố gắng nghĩ ra một cách tiếp cận hơi khác nhau (nếu bạn có thể, tất nhiên), ví dụ:

  • Có một rất nhiều phần mềm miễn phí/không tự do mà không giám sát, bao gồm Giám sát dịch vụ Windows (ví dụ: nagios, Zabbix, v.v.). Các màn hình này thường có API mở, nơi ứng dụng Java của bạn có thể tích hợp vào một số cách khác nhau.
  • Nếu bạn có quyền kiểm soát ứng dụng dịch vụ tùy chọn, hãy hiển thị một ứng dụng Java khác để kiểm tra (ví dụ: chạy trình nghe giả trên cổng, tạo tệp, v.v.). Các dịch vụ Windows không phải là một nền tảng đa nền tảng do đó không phải là thứ mà bạn mong đợi sẽ sớm được hỗ trợ.
0

Tôi không biết bất kỳ thư viện nào, nhưng tùy thuộc vào mức độ chi tiết cần thiết để bạn có thể nhận được bằng một số lệnh trình bao và phân tích cú pháp đầu ra.

NET START servicename

hoặc sẽ bắt đầu dịch vụ, hoặc cung cấp cho bạn trở lại một thông báo lỗi mà nói với bạn của mình đã bắt đầu. Tôi không biết bất kỳ lệnh nào sẽ chỉ cung cấp cho bạn trạng thái.

3

Tôi không nghĩ rằng có bất kỳ cách Java thuần túy nào để làm điều này bởi vì một số hệ điều hành không có khái niệm về "dịch vụ" như Windows. Trong các dự án của chúng tôi, chúng tôi đã viết một trình bao bọc xung quanh các lệnh gọi tới lệnh "sc" từ dòng lệnh. Để có được vị thế của một dịch vụ, bạn có thể làm: truy vấn

sc \\ một số máy tính "tên dịch vụ của tôi"

Bạn sẽ phải tự phân tích đầu ra nhưng nó khá đơn giản.

+0

cách đơn giản để thực hiện việc này trong Java –

0

Tôi nghĩ đây là cách tốt nhất để kiểm tra trạng thái của dịch vụ.

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"); //sc query is commond and browser is the name of service 

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



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