我一直在尝试通过JNA API更改现有Windows服务的配置,特别是通过com.sun.jna.platform.win32.Advapi32类,但找不到足够的文档来实现这一点。
同样可以通过在Windows CMD中运行'sc‘命令来实现:
sc config "MyServiceName" obj="domain\windowsuser" password= "userpassword"到目前为止,这就是我在弄清楚Java代码(正在进行中)方面所达到的目标:
private static void printAllServices(String username, String password) {
boolean success = false;
SC_HANDLE serviceManager = openServiceControlManager(null, Winsvc.SC_MANAGER_ALL_ACCESS);
if (serviceManager != null) {
SC_HANDLE service = Advapi32.INSTANCE.OpenService(serviceManager, "MyServiceName",
WinNT.GENERIC_EXECUTE);
if (service != null) {
SERVICE_STATUS serviceStatus = new SERVICE_STATUS();
success = Advapi32.INSTANCE.ControlService(service, Winsvc.SERVICE_CHANGE_CONFIG, serviceStatus);
Advapi32.INSTANCE.CloseServiceHandle(service);
}
Advapi32.INSTANCE.CloseServiceHandle(serviceManager);
}
}
private static SC_HANDLE openServiceControlManager(String machine, int access) {
return Advapi32.INSTANCE.OpenSCManager(machine, null, access);
}我的目标是通过Java API更改现有windows服务运行所使用的用户名/密码(但不是通过直接执行'sc‘命令,而是通过JNA API)。
任何方向正确的灯光(或文档参考)都会很有帮助。
发布于 2018-11-15 18:48:45
由于Advapi32下似乎没有JNA API,因此调用了一个script.exe (传递所需的参数),该API包含对"advapi32.dll“执行DllImport的C#代码,并使用以下导入下的API
using System.Runtime.InteropServices;
using System.ComponentModel;参考:https://www.morgantechspace.com/2015/03/csharp-change-service-account-username-and-password.html
https://stackoverflow.com/questions/53280844
复制相似问题