![]() |
Dienst starten mit Delphi
Hallo zusammen,
ich hätte eine frage zu diesem code :
Delphi-Quellcode:
function ServiceStart(Machine, ServiceName: string): Boolean;
// Machine is UNC path or local machine if empty var h_manager, h_svc: SC_Handle; ServiceStatus: TServiceStatus; dwCheckPoint: DWORD; ServiceArgVectors: PChar; begin h_manager := OpenSCManager(PChar(Machine), nil, SC_MANAGER_CONNECT); if h_manager > 0 then begin h_svc := OpenService(h_manager, PChar(ServiceName), SERVICE_START or SERVICE_QUERY_STATUS or SC_MANAGER_ALL_ACCESS); if h_svc > 0 then //ab hier bricht er ab und beendet alles begin if (StartService(h_svc, 0, ServiceArgVectors)) then { succeeded } begin if (QueryServiceStatus(h_svc, ServiceStatus)) then begin while (SERVICE_RUNNING <> ServiceStatus.dwCurrentState) do begin dwCheckPoint := ServiceStatus.dwCheckPoint; Sleep(ServiceStatus.dwWaitHint); if (not QueryServiceStatus(h_svc, ServiceStatus)) then // couldn't check status break; if (ServiceStatus.dwCheckPoint < dwCheckPoint) then break; end; end; end; CloseServiceHandle(h_svc); end; CloseServiceHandle(h_manager); end; Result := (SERVICE_RUNNING = ServiceStatus.dwCurrentState); end; und zwar wenn ich dies ausführe, komme ich nie in die ab kommentar rein könnt ihr mir lösungvorschläge geben danke im vorraus |
AW: Dienst starten mit Delphi
Werte im else Zweig der If Beding aus und mach da mal ein GetLastError rein. Ist auch eine Unsitte Fehler nicht auszuwerten.
Oder guck mal in der Ereignisanzeige von Windows, ob du da was findest. |
AW: Dienst starten mit Delphi
Hallo und Herzlich Willkommen in den Heiligen Hallen des Wissens und des Wahnsinns :love:
Delphi-Quellcode:
ist ein WinApi-Aufruf. Schau mal in die Doku dazu:
OpenService
![]() Zitat:
|
AW: Dienst starten mit Delphi
Es werden vermutlich Adminrechte zum Ausführen nötig sein.
Als IDE mit Adminrechten starten wenn du das Debuggen willst. |
AW: Dienst starten mit Delphi
Jetzt wird rumgeraten. Fehler auswerten und sehen wo ran es liegt. Dann kann man sich um eine Lösung kümmern.
|
AW: Dienst starten mit Delphi
Danke für die Antworten
Hab es ausprobiert und gesehen, dass ich keine rechte habe. Man muss es dann als Admin ausführen, dann funktioniert es. |
AW: Dienst starten mit Delphi
Fehlercode 5 von GetLastError oder?
Hast du den Code entsprechend angepasst/verbessert? |
AW: Dienst starten mit Delphi
Fehlermeldung : ... 'Systemfehler. Code: 5. Zugriff verweigert' aufgetreten
Wenn ich das Programm aber einfach mit Rechtsklick 'Als Admin ausführen' starte funktioniert es. Noch hab ich nichts gemacht. |
AW: Dienst starten mit Delphi
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. :roll: 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; ![]() Also ich würde mir da die Fehlerbehandlung mal abgucken. |
AW: Dienst starten mit Delphi
So
tschuldigung für die späte antwort, jedoch konnte ich vorher nicht. ich hab es so erstellt, dass ich es im Aufgabenplaner anlege. dort lege ich den user als admin fest. und der dienst kann gestartet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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