![]() |
Probleme bei programmgesteuertem Start von Diensten
Moin,
ich habe hier einen Dienst, welcher sich Pop3Service nennt. Ich möchte diesen vom Steuerprogramm aus starten und stoppen können. Dazu bediene ich mich der ![]() zunächst mal ein paar Codezeilen:
Delphi-Quellcode:
Wenn ich im Debugger schaue, ist dieser Aufruf:
cname := getcomputername; // ermittelt den Namen des Computers, in diesem Fall PC-PAPA-XP64
procedure TFrmMain.btn_service_startClick(Sender: TObject); begin if ServiceRunning(pchar(cname),'Pop3Service') then ServiceStop(pchar(cname),'Pop3Service') else ServiceStart(pchar(cname),'Pop3Service'); check_service_running; end; procedure TFrmMain.check_service_running; begin if ServiceRunning(pchar(cname),pchar('Pop3Service')) then btn_service_start.Caption := 'Service anhalten' else btn_service_start.Caption := 'Service start'; end;
Delphi-Quellcode:
0 müsste aber <> 0 sein.
OpenService(h_manager, PChar(ServiceName)
Der Service DisplayName ist Pop3Service Wer hat nen heißen Tipp? Gruss EL |
Re: Probleme bei programmgesteuertem Start von Diensten
du hast dir eigentlich schon selbst die Antwort gegeben.
Zitat:
|
Re: Probleme bei programmgesteuertem Start von Diensten
Zitat:
Gruss EL [edit=SirThornberry]Quote-Tag berichtigt - Mfg, SirThornberry[/edit] |
Re: Probleme bei programmgesteuertem Start von Diensten
Was sagt GetLastError?
|
Re: Probleme bei programmgesteuertem Start von Diensten
Zitat:
Gruss EL |
Re: Probleme bei programmgesteuertem Start von Diensten
und hmanager ist auch <> 0? Funktioniert es mit anderen Services?
|
Re: Probleme bei programmgesteuertem Start von Diensten
Zitat:
Gruss EL |
Re: Probleme bei programmgesteuertem Start von Diensten
hmm, dann schau mal mit folgender Funktion welcher Name dir für den Dienst zurück gegeben wird:
Delphi-Quellcode:
Vielleicht muss Groß-/Kleinschreibung beachtet werden.
function GetServiceName(ADisplayName: String): String;
var lGiveback : String; lManager : Cardinal; lMem, lServiceStatus : PEnumServiceStatus; lNeeded, lCnt, lResHandle : Cardinal; lCount : Integer; begin ADisplayName := AnsiLowerCase(ADisplayName); lGiveback := ''; lManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS or SC_MANAGER_ENUMERATE_SERVICE); if (lManager <> 0) then begin lResHandle := 0; lMem := nil; EnumServicesStatus(lManager, SERVICE_WIN32 or SERVICE_DRIVER, SERVICE_STATE_ALL, lMem^, 0, lNeeded, lCnt, lResHandle); if (GetLastError = ERROR_MORE_DATA) then begin lResHandle := 0; GetMem(lMem, lNeeded); if EnumServicesStatus(lManager, SERVICE_WIN32, SERVICE_STATE_ALL, lMem^, lNeeded, lNeeded, lCnt, lResHandle) then begin lServiceStatus := lMem; lCount := 0; while (lCount < lCnt) and (lGiveback = '') do begin if (ADisplayName = AnsiLowerCase(String(lServiceStatus^.lpDisplayName))) then lGiveback := String(lServiceStatus^.lpServiceName); lServiceStatus := Pointer(Cardinal(lServiceStatus) + SizeOf(TEnumServiceStatus)); inc(lCount); end; end; FreeMem(lMem); end; CloseServiceHandle(lManager); end; result := lGiveback; end; |
Re: Probleme bei programmgesteuertem Start von Diensten
ich war in der Zwischenzeit nicht untätig und habe folgendes herausgefunden:
Wenn ich als Startname: frmmain angebe, klappt es!!!! (Das war mir schon mal bei einem anderen Dienst aufgefallen) Aber: frmmain ist nur der Name der Form. Der Dienst UND der Displayname sind beide Pop3Service. :gruebel: Auch im XP-DienstManager steht Pop3Service. Wenn ich den über die Konsole starte, dann auch mit net start pop3service. und nun? Ergänzung: ich habe mit getservicename alles durch. Result immer '' Gruss EL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 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