![]() |
Service startet nicht
Tachchen,
wir hängen hier seit einer Weile an einem Problem fest. Es wurde mit Delphi XE über TService ein Service erstellt, welcher sich aber urplötzlich nicht mehr starten läßt. Am eigenen Quellcode kann es nicht liegen, da ich es auch schon über ein älteres Repository versucht hab, welches mal lief. Was ich bis jetzt rausbekommen hab ist, daß TService.OnCreate noch erfolgreich durchläuft, aus Application.CreateForm kommt er auch noch raus und im Application.Run hängt es dann irgendwo ... TService.OnExecute wird nicht mehr aufgerufen. Es hängt also scheinbar irgendwo innerhalb von TService und die Windows-Ereignisanzeigen sagen kein Wort, außer, was auch als Meldung kommt. Zitat:
Das Ganze ist ein Windows Server 2008 R2 SP1 64 Bit. Zwischen dem letzen bekannten Funktionieren unseres Services und dem erkannten Problem, wurden keine Windowsupdates eingespielt. Aber auf anderen Systemen/Rechnern läuft es problemlos. :wall: Hat da jemand eine Rat/Tipp? Den Service zu Debuggen brachte keine Erkenntnisse, da es, auf Grund der Architektur, nicht ging. - Service starten (mit Sleep drin, aber leider schießt die Diensteverwaltung den dann recht schnell ab) - Delphi als Admin starten und dann zum Prozess verbinden - nur klappt das mit dem Admin nicht, da delphi dann Adminkonto läuft und dort meine Einstellungen und benutzerbezogenen SUBST-Laufwerke nicht vorhanden sind |
AW: Service startet nicht
Hallo,
ist irgendetwas in den Windows Eventlogs zu finden? Grüße Klaus |
AW: Service startet nicht
Wie gesagt, dort steht absolut nix.
Außer sowas wie, Zitat:
Zitat:
|
AW: Service startet nicht
Da bleibt euch wohl nur übrig. Weitere Logfunktionalität in den Dienst zu implementieren
|
AW: Service startet nicht
Service debuggen braucht kein Sleep :)
Delphi IDE -> Menü Run -> Parameters -> Host application: "net", Parameters: "start MeinServiceName" (jeweils ohne die Anführungszeichen). Das Laufwerksargument zählt (vermutlich) nicht - ein Service läuft i.d.R. sowieso nochmal unter einem ganz anderen Account (LocalSystem) und hat daher die ge-subst-eten Laufwerke auch nicht! Eine Ausnahme wäre ein Service, der speziell unter deinem Account läuft. Aber wou dann noch ein Service? Wenn's nur um's Delphi selber geht - ich starte mir immer den TotalCommander ebenfalls elevated, klicke einmal alle Netzwerklaufwerke oben durch, um die gleichen Verbindung, die ich ohne Elevation habe, herzustellen (bis dahin sind sie zwar bekannt, aber nicht geöffnet, und ein direkter Zugriff auf Dateien dort schlüge fehl), fertig. Einmal pro Rechnerneustart halt, lässt sich sicher auch automatisieren, war ich bisher nur zu faul zu ;) |
AW: Service startet nicht
Wir haben Eurekalog drin (auch versuchsweise mal nicht)
und ich hab nun schon zu nahezu jedem Befehl einen Logeintrag (pumpe es seit Tagen nur noch voll damit). Mehr Logs gehn nicht, da das Programm sonst nirgenwo mehr vorbei kommt. Zitat:
Zitat:
Zitat:
Wenn ich was über's UAC mit Adminrechten gestartet hab (bin ja nur "Benutzer"), dann sehen die Programme die einstellungen des Admin-akkount, also dessen Benutzernamen und dieser Name wird dann zum verbinden der Laufwerke verwendet. |
AW: Service startet nicht
Zitat:
Application.Run; beendet sich dann immer sofort und startet erst garnicht. Das passierte auch schon, als ich damals versuchte den Prozess (die Service.exe) direkt im Delphi zu debuggen. Irgendwie erkennt TService anscheinend, daß es nicht als "Dienst" im SYSTEM-Konto läuft und startet dann garnicht erst. Aus diesem Grund hatte ich damals sowas gemacht, um es Debuggen zu können.
Delphi-Quellcode:
Diese "Hack" läuft, wobei Application.Ran umgangen wird, welches ja erzeit nicht geht und beim Debuggen auch nie funktionierte.
procedure TProdatSRVXEService.ServiceCreate(Sender: TObject);
var Started: Boolean; Temp: TForm; begin LogEvent('DataServer-Create'); LoadConfiguration; if Trim(SvcMgr.Application.Title) = '' then SvcMgr.Application.Title := ExtractFileName(Forms.Application.ExeName); if IsDebuggerPresent or FindCmdLineSwitch('DEBUG') then begin Forms.Application.MainFormOnTaskBar := False; // geht leider doch nicht ohne Form Forms.Application.CreateForm(TForm, Temp); // Form zum Beenden und für Eintrag in Taskbar Temp.Caption := 'Debug-Mode: ' + SvcMgr.Application.Title; Temp.OnCloseQuery := DebugServiceClose; Temp.Visible := True; { SvcMgr.Application.Run; } {}if FindCmdLineSwitch('INSTALL', ['-', '/'], True) then {} TServiceApplicationHack(Application).RegisterServices(True, FindCmdLineSwitch('SILENT', ['-', '/'], True)) {}else if FindCmdLineSwitch('UNINSTALL', ['-', '/'], True) then {} TServiceApplicationHack(Application).RegisterServices(False, FindCmdLineSwitch('SILENT', ['-', '/'], True)) {}else begin {} Started := True; {} ServiceStart(Self, Started); {} if Started then {} while not (Terminated or StopService) do begin {} Forms.Application.ProcessMessages; {} Sleep(20); {} end; {} Forms.Application.Terminate; {}end; end; end; procedure TProdatSRVXEService.DebugServiceClose(Sender: TObject; var CanClose: Boolean); begin StopService := True; end; Allerdings läuft er so als Anwendung und nicht als Dienst. PS: Diesen Codeteil hatte ich gerade natürlich auskommentiert. |
AW: Service startet nicht
Zitat:
Bei mir funktioniert es nämlich (mit Delphi XE) sehr zuverlässig, habe damit gerade in den letzten 8 Wochen etliches debugged. Erinnere mich grob daran, daß der Service natürlich schon installiert sein muss, und der ImagePath stimmen muss (ich habe für Debug und Release getrennte Pfade, d.h. ein installiertes Release würde Debug "unmöglich" machen - dann springt er halt auch mit F7 gar nicht erst in den Code). Das sind meine zwei Hauptfehler beim Testen gewesen. Zitat:
Allerdings kann ich wie gesagt meine Services, die mit ObjectName=LocalSystem sowohl in Delphi konfiguriert als auch im System eingetragen sind, zu debuggen. Wie das mit Delphi 2010 ist, weiß ich leider nicht, nur daß es unter Delphi 2006 (hatte ich davor) nicht so einfach klappte. Jetzt mit IDA Pro (oder einem anderen Debugger Deiner Wahl) auch noch das "net" zu debuggen, um zu sehen, ob und wie er in Dein Kompilat springt, wäre vermutlich etwas übertrieben, würde mir sonst nur als letzte Lösung einfallen. |
AW: Service startet nicht
EXE direkt im Debugger gestartet liegt auf einem SUBST-Laufwerk.
Der installierte Service aber auf einer normalen Partition. Also starten tut es erstmal, aber .Run beendet sich eben immer gleich wieder. |
AW: Service startet nicht
Und wenn du die Exe mal testweise auf ein lokales Laufwerk packst?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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