2011-07-29 180 views
8

我正在编写一个实用程序来启动和停止Windows服务。该程序将分布在许多具有不同级别用户权限的计算机上,因此我不想使用命令行。我已经使用JNA试过,使用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(); 
     } 


    } 
} 

当我运行程序我碰到下面的错误

com.sun.jna.platform.win32.Win32Exception:句柄无效。 在com.sun.jna.platform.win32.W32ServiceManager.openService(W32ServiceManager.java:77) 在windowsservices.WindowsServices.main(WindowsServices.java:26)

任何建议将是最有帮助的。

+0

这很酷,不知道你可以用JNA轻松控制Windows服务。 – tmbrggmn

+0

我用这种方法发现的唯一问题是,当您尝试停止服务时,必须提供额外的try/catch块,因为某些服务需要一段时间才能从运行停止。 – GEverding

+0

您好!添加答案作为有效答案 – gavioto

回答

0

我们使用Runtime.getRuntime.exec(),然后执行命令

CMD/C网开始

启动服务和

CMD/C网停止

停止服务。

当然,您必须知道服务名称(在我们的例子中,它是DB2之后)。但是这对我们有效。

1

感谢您的建议,问题的作者发现错误。

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(); 
     } 
    } 
} 

错误是代码没有打开服务控制管理器。我正在寻找MSDN,并发现我需要遵循的过程。我也偶然获得许可价值,这也可能导致失败。

+0

这是一个很好的解决方案 – gavioto