Ich habe versucht, die Konfiguration für einen vorhandenen Windows-Dienst über die JNA-API zu ändern, insbesondere über die com.sun.jna.platform.win32.Advapi32
Klasse, konnte aber nicht genügend Dokumentation dafür finden.
Dasselbe kann durch Ausführen des Befehls ‚sc' in Windows CMD erreicht werden:
sc config "MyServiceName" obj="domain\windowsuser" password= "userpassword"
Bisher habe ich beim Herausfinden von Java-Code (work in progress) Folgendes erreicht:
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);
}
Mein Ziel ist es, den Benutzernamen/das Passwort zu ändern, unter dem ein vorhandener Windows-Dienst über die Java-API ausgeführt wird (jedoch nicht durch direktes Ausführen des Befehls ‚sc', sondern über die JNA-API).
Jedes Licht in die richtige Richtung (oder Dokumentationsreferenz) wäre hilfreich.
Lösung des Problems
Da es unter Advapi32 keine JNA-API zu geben scheint, wurde eine script.exe aufgerufen (mit Übergabe der erforderlichen Argumente), die C#-Code enthält, der DllImport von „advapi32.dll" durchführt und APIs unter folgenden Importen verwendet
using System.Runtime.InteropServices;
using System.ComponentModel;
Als Referenz: https://www.morgantechspace.com/2015/03/csharp-change-service-account-username-and-password.html
Keine Kommentare:
Kommentar veröffentlichen