Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#9

AW: Dienst starten mit Delphi

  Alt 17. Nov 2016, 15:29
Aus diesem Grunde sollte man eben auch die Rückgabewerte ordentlich auswerten, denn die sagen einem oft, woran es hängt.
Hier also an den fehlenden Rechten.

Und ja, genau darum geht das dann, denn dann hat dein Programm die nötigen Rechte, um diesen Befehl ausführen zu dürfen.
Entweder dein Programm hat von Anfang an die nötigen Rechte, oder man besurgt sie sich zur Laufzeit und gibt das zugehörige Token da rain, wo du nil übergist.
[edit] Nee, diese APIs haben zufällig mal keinen Parameter für einen SECURITY_DESCRIPTOR. (es gibt nur die Möglichkeit die Rechte für den laufenden Service festzulegen)
Also bliebe nur noch die Möglichkeit die Rechte des Threads für diesen Aufruf anzupassen, wenn das Programm nicht schon mit ausreichenden Rechten gestartet wurde.


PS: Aus diesem Grunde hatte ich in meiner Unit das auch nochmal für den Entwickler kenntlich gemacht.
Leider steht im MSDN nicht welches Privilege/Recht nun genau benötigt wird.
Delphi-Quellcode:
type
  [API('AdvAPI32.dll'), Source('winsvc.h')]
  ServiceControl = class abstract
    [UserAdmin, API('AdvAPI32.dll', 'StartService')] // <<<<<<<<<<<<<< ADMIN <<<<<<<<<<<<<<<<<<
    procedure Start(const ServiceName: string; const Parameters: array of string); overload;
    procedure Start(const ServiceName: string); overload;

    ...
  emd;
http://www.delphipraxis.net/190362-d...ml#post1349417
Also ich würde mir da die Fehlerbehandlung mal abgucken.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Nov 2016 um 01:27 Uhr)
  Mit Zitat antworten Zitat