2011-07-29 38 views
8

Tôi đang viết một tiện ích để bắt đầu và dừng các dịch vụ windows. Chương trình sẽ được phân phối trên nhiều máy tính với các mức độ khác nhau của đặc quyền người dùng vì vậy tôi không muốn sử dụng dòng lệnh. Tôi đã cố gắng sử dụng JNA,Dịch vụ bắt đầu/dừng sử dụng JNA

import com.sun.jna.platform.win32.W32Service; 
import com.sun.jna.platform.win32.W32ServiceManager; 
import com.sun.jna.platform.win32.Winsvc; 

/** 
* 
* @author 
*/ 
public class WindowsServices { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     try 
     { 

     // TODO code application logic here 
     W32ServiceManager serviceManager = new W32ServiceManager(); 

     W32Service service = serviceManager.openService("uvnc_service", Winsvc.SERVICE_ACCEPT_STOP); 
     service.stopService(); 
     service.close(); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 


    } 
} 

Khi tôi chạy chương trình tôi nhận được lỗi sau

com.sun.jna.platform.win32.Win32Exception: Việc xử lý không hợp lệ. tại com.sun.jna.platform.win32.W32ServiceManager.openService (W32ServiceManager.java:77) tại windowsservices.WindowsServices.main (WindowsServices.java:26)

Bất kỳ lời đề nghị sẽ là hữu ích nhất.

+0

Điều này khá thú vị, không biết bạn có thể kiểm soát các dịch vụ Windows dễ dàng với JNA. – tmbrggmn

+0

Vấn đề duy nhất tôi tìm thấy với phương pháp này là khi bạn cố gắng dừng các dịch vụ, bạn phải cung cấp thêm các khối try/catch vì một số dịch vụ mất một lúc để đi từ khi chạy đến ngừng. – GEverding

+0

Bạn suhold thêm câu trả lời làm câu trả lời hợp lệ – gavioto

Trả lời

0

Chúng tôi sử dụng Runtime.getRuntime.exec() và sau đó thực hiện lệnh

cmd/c net start

để bắt đầu dịch vụ và

cmd/c net stop

ngừng dịch vụ.

Tất nhiên bạn phải biết tên dịch vụ (và trong trường hợp của chúng tôi đó là DB2 mà chúng tôi đang theo dõi). Nhưng điều này đã làm việc cho chúng tôi.

1

Cảm ơn đề xuất, tác giả của câu hỏi đã tìm thấy lỗi.

import com.sun.jna.platform.win32.W32Service; 
import com.sun.jna.platform.win32.W32ServiceManager; 
import com.sun.jna.platform.win32.Winsvc; 

/** 
* 
* @author 
*/ 
public class WindowsServices { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     try 
     { 
      W32ServiceManager serviceManager = new W32ServiceManager(); 
      serviceManager.open(Winsvc.SC_MANAGER_ALL_ACCESS); 
      W32Service service = serviceManager.openService("uvnc_service", Winsvc.SC_MANAGER_ALL_ACCESS); 
      service.startService(); 
      service.close(); 
     } catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

Lỗi là mã không mở Trình quản lý điều khiển dịch vụ. Tôi đã tìm kiếm trên MSDN và tìm thấy quá trình mà tôi cần phải làm theo. Tôi cũng nhảy theo giá trị cho phép, điều đó cũng có thể gây ra một thất bại.

+0

Đây là giải pháp tốt – gavioto

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