Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateService funktioniert bei mir nicht richtig (https://www.delphipraxis.net/55124-createservice-funktioniert-bei-mir-nicht-richtig.html)

Angel4585 17. Okt 2005 07:31


CreateService funktioniert bei mir nicht richtig
 
Hallo Leutz,

Ih hab ein kleines Problem mit der CreateService Funtion.

Eigentlich müsste das ja so ohne Probleme funktionieren:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
const
SERVICE_NAME = 'dienst2';
DISPLAY_NAME = 'TestServiceX';
lpszBinaryPathName = 'C:\WINNT\system32\dienst2.exe';//Datei existiert!
var
schService : SC_Handle;
schSCManager : SC_Handle;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if schSCManager = 0 then
 raise Exception.Create(SysErrorMessage(GetLastError));
schService := CreateService(
               schSCManager,              // SCManager database
               SERVICE_NAME,              // name of service
               DISPLAY_NAME,              // service name to display
               SERVICE_ALL_ACCESS,        // desired access
               SERVICE_WIN32_OWN_PROCESS, // service type
               SERVICE_AUTO_START,        // start type
               SERVICE_ERROR_NORMAL,      // error control type
               lpszBinaryPathName,        // service's binary
               nil,                       // no load ordering group
               nil,                       // no tag identifier
               nil,                       // no dependencies
               nil,                 // LocalSystem account
               nil);                 // no password

if schService <> 0 then
 ShowMessage(DISPLAY_NAME+' installed SUCCESSFUL.')
else raise Exception.Create(SysErrorMessage(GetLastError));
CloseServiceHandle(schService);
end;
Allerdings startet der Service nicht wenn ich ihn starten will. Wenn ich hingegen mit in der eingabeaufforderung mit "dienst2 /install" installiere dann funktioniert es problemlos.

Ausserdem kann ich den Service wenn ich über die Delphifunktion installiere nicht deinstallieren. Mein rechteckiger Freund bringt mmir denn die Meldung das der Service nicht installiert ist, obwohl er bei den Diensten klar sichtbar ist und auch versucht zu starten.

NEED HELP!!

Danke schonmal im Vorraus.

Edit: Beim installieren mit CreateService wird das ShowMessage(DISPLAY_NAME+' installed SUCCESSFUL.') angezeigt.
Beim starten kommt dann die Meldung "Der Deinst TestServiceX kann nicht auf "Lokaler Computer" gestartet werden.
Fehler 1053:Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung"
Nach dieser Meldung steht bei den Diensten dann nurnoch Stundenlang das der Dienst geladen wird, was allerdings nie geschieht

Angel4585 17. Okt 2005 12:20

Re: CreateService funktioniert bei mir nicht richtig
 
So..da jetzt mal keine Antwort kommt hab ich selber mal nachgeschaut.
Es gibt einige Artikel bei denen mein Problem behandelt wird, allerdings wird nie ne vernünftige Lösung für das Problem geboten.

Jetzt möchte ich einfach mal wissen ob jemand mit CreateService schonmal einen Dienst erfolgreich installiert hat und diesen dann auch ausführen konnte.

NicoDE 17. Okt 2005 13:32

Re: CreateService funktioniert bei mir nicht richtig
 
Zitat:

Zitat von Angel4585
Edit: Beim installieren mit CreateService wird das ShowMessage(DISPLAY_NAME+' installed SUCCESSFUL.') angezeigt.
Beim starten kommt dann die Meldung "Der Deinst TestServiceX kann nicht auf "Lokaler Computer" gestartet werden.
Fehler 1053:Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung"
Nach dieser Meldung steht bei den Diensten dann nurnoch Stundenlang das der Dienst geladen wird, was allerdings nie geschieht

Die Art des Fehlers lässt auf einen Fehler im Service schliessen (und hat wenig bis gar nichts mit CreateService zu tun)...

Angel4585 17. Okt 2005 14:21

Re: CreateService funktioniert bei mir nicht richtig
 
Nein ist definitiv nicht der Service
Begründung :

1. Ich habe den Service einmal mit der Eingabeaufforderung installiert und da funktionierte es.
2. Habe ich das Problem gerade gelöst:

Ich hatte anfangs :
Delphi-Quellcode:
CreateService( 
               schSCManager,              // SCManager database
               SERVICE_NAME,              // name of service
               DISPLAY_NAME,              // service name to display
               SERVICE_ALL_ACCESS,        // desired access
               SERVICE_WIN32_OWN_PROCESS, // service type
               SERVICE_AUTO_START,        // start type
               SERVICE_ERROR_NORMAL,      // error control type
               lpszBinaryPathName,        // service's binary
               nil,                       // no load ordering group
               nil,                       // no tag identifier
               nil,                       // no dependencies
               nil,                 // LocalSystem account
               nil);                 // no password
Richtig ist:
Delphi-Quellcode:
CreateService( 
               schSCManager,              // SCManager database
               SERVICE_NAME,              // name of service
               DISPLAY_NAME,              // service name to display

               SC_MANAGER_CONNECT or
               SC_MANAGER_ENUMERATE_SERVICE or
               SC_MANAGER_MODIFY_BOOT_CONFIG or
               SC_MANAGER_QUERY_LOCK_STATUS or
               STANDARD_RIGHTS_READ,        // desired access

               SERVICE_WIN32_OWN_PROCESS, // service type
               SERVICE_AUTO_START,        // start type
               SERVICE_ERROR_NORMAL,      // error control type
               lpszBinaryPathName,        // service's binary
               nil,                       // no load ordering group
               nil,                       // no tag identifier
               nil,                       // no dependencies
               nil,                 // LocalSystem account
               nil);                 // no password
da SERVICE_ALL_ACCESS nur für Admins gilt , ich aber nicht als Admin sondern als LocalSystem den Dienst starte muss ich die Zugriffe für LocalSystem angeben und die sind :

SC_MANAGER_CONNECT or
SC_MANAGER_ENUMERATE_SERVICE or
SC_MANAGER_MODIFY_BOOT_CONFIG or
SC_MANAGER_QUERY_LOCK_STATUS or
STANDARD_RIGHTS_READ

Auch wenn ich es letztendlich doch alleine geschafft habe sag ich nochmal danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz