![]() |
Dienst Starten/Stoppen Windows Server 2012
Hallo zusammen,
die Funktionen laufen unter Windows 10 einwandfrei. Unter Windows Server 2012 kommt allerdings der Staus-Code = 0 heraus und nichts tut sich. :?: ![]() Gibt es diese Routine auch für Windows 2012 Server? Ausgeführt werden die Funktionen mit dem Recht eines Administrators. Viele Grüße Axel |
AW: Dienst Starten/Stoppen Windows Server 2012
Unicode scheint erstmal kein Problem zu sein, bei dem alten Code. (auf den ersten Blick)
Aber bei der Fehlerbehandlung fehlt ein bissl was ... alles mit GetLastError bei Fehlern. Vieles ist richtig mit
Delphi-Quellcode:
abgefangen, aber im ELSE wird der Fehler nicht ausgewertet.
if ... <> 0 then
Was sagt der Debugger? Delphi mit Adminrechten starten und dann diesen Code mal schrittweise durchgehn. Nicht schlimm, aber k.A. warum ServiceGetStatus/ServiceRunnig mit PChar und nicht auch mit String deklariert wirden. :stupid: |
AW: Dienst Starten/Stoppen Windows Server 2012
Zitat:
Delphi-Quellcode:
Tut bei mir jedenfalls auf alles OS.
SMHandle := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
... OpenService(SMHandle,PWideChar('ServiceName'),SERVICE_QUERY_STATUS); ... |
AW: Dienst Starten/Stoppen Windows Server 2012
Ein Leerstring ist nil (nur nicht, wenn man das über PChar "castet", denn dieser Cast, leitet bei einem Leerstring auf eine Dummy-Konstante mit dem Inhalt #0#0 um)
Und dann eben andersrum, denn die Start- und Stopfunktionen sind ja mit String deklariert :zwinker: Die Fehlerbehandlung ist das größere Problemchen. Der Code mag funktionieren, aber wenn was nicht geht, dann erfährt man nicht das Warum. :angle: @mm: Genau sowas war/ist das Problem, seit der Unicode-Umstellung, im Jahre 2009, bzw. dein Code knallt vor D2009 im Compiler. Weil Viele einfach falsche Typen verwendeten. Zitat:
OpenServiceA > PAnsiChar(AnsiString) OpenServiceW > PWideChar(WideString) oder PWideChar(UnicodeString) |
AW: Dienst Starten/Stoppen Windows Server 2012
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab da mal was ausgekoppelt.
Delphi-Quellcode:
if ServiceControl.Start('DeinService') then
if ServiceControl.Stop('DeinService') then
Delphi-Quellcode:
uses
System.TypeInfo; procedure TForm6.FormCreate(Sender: TObject); var Arr: TArray<string>; begin Memo1.Lines.Add('GetStatusStr ' + ServiceControl.GetStatusStr('DeinService')); Memo1.Lines.Add('GetStatus ' + GetEnumName(TypeInfo(ServiceControl.TStatus), Ord(ServiceControl.GetStatus('DeinService')))); Memo1.Lines.Add('IsRunning ' + BoolToStr(ServiceControl.IsRunning('DeinService'), True)); Memo1.Lines.Add('IsInteractive ' + BoolToStr(ServiceControl.IsInteractive('DeinService'), True)); Memo1.Lines.Add('AcceptControl ' + SetToString(PTypeInfo(TypeInfo(ServiceControl.TAccepts)), Byte(ServiceControl.AcceptControl('DeinService')), True)); Memo1.Lines.Add('GetDisplayName ' + ServiceControl.GetDisplayName('DeinService')); if True {IsAdmin} then begin if ServiceControl.Start('DeinService') then Memo1.Lines.Add('Start') else Memo1.Lines.Add('NOT Start'); if ServiceControl.TAccept.PauseContinue in ServiceControl.AcceptControl('DeinService') then begin if ServiceControl.Pause('DeinService') then Memo1.Lines.Add('Pause') else Memo1.Lines.Add('NOT Pause'); if ServiceControl.Continue('DeinService') then Memo1.Lines.Add('Continue') else Memo1.Lines.Add('NOT Continue'); end; if ServiceControl.Stop('DeinService') then Memo1.Lines.Add('Stop') else Memo1.Lines.Add('NOT Stop'); end; Arr := ServiceControl.GetDependencies('DeinService'); Memo1.Lines.Add('* GetDependencies ' + IntToStr(Length(Arr))); Memo1.Lines.AddStrings(Arr); Arr := ServiceControl.EnumServices; Memo1.Lines.Add('* EnumServices False ' + IntToStr(Length(Arr))); Memo1.Lines.AddStrings(Arr); Arr := ServiceControl.EnumServices([ServiceControl.TState.All], True); Memo1.Lines.Add('* EnumServices True ' + IntToStr(Length(Arr))); Memo1.Lines.AddStrings(Arr); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz