我正在编写一个实用程序来启动和停止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();
}
}
}
当我运行程序时,我收到以下错误
com.sun.jna.platform.win32.Win32Exception:句柄无效。 at com.sun.jna.platform.win32.W32ServiceManager.openService(W32ServiceManager.java:77) 在windowsservices.WindowsServices.main(WindowsServices.java:26)
任何建议都会有所帮助。
答案 0 :(得分: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上寻找并找到了我需要遵循的流程。我也偶然发现了许可值,这也可能导致失败。
答案 1 :(得分:0)
我们使用Runtime.getRuntime.exec()
然后执行命令
cmd / c net start
启动服务和
cmd / c net stop
停止服务。
当然,您必须知道服务名称(在我们的例子中,它是我们正在使用的DB2)。但这对我们有用。