【发布时间】:2011-10-16 02:03:05
【问题描述】:
我正在编写一个实用程序来启动和停止 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:句柄无效。 在 com.sun.jna.platform.win32.W32ServiceManager.openService(W32ServiceManager.java:77) 在 windowsservices.WindowsServices.main(WindowsServices.java:26)
任何建议都会很有帮助。
【问题讨论】:
-
这很酷,不知道你可以使用 JNA 轻松控制 Windows 服务。
-
我发现这种方法的唯一问题是,当您尝试停止服务时,您必须提供额外的 try/catch 块,因为某些服务从运行到停止需要一段时间。
标签: java winapi windows-services jna