使用JNA启动/停止服务

GEv*_*ing 8 java winapi windows-services jna

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


    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,我收到以下错误

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

任何建议都会有所帮助.

Chr*_*ich 0

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

cmd /c 网络启动

启动服务并

cmd /c 网络停止

停止服务。

当然,您必须知道服务名称(在我们的例子中,我们要查找的是 DB2)。但这对我们来说很有效。