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.