![]() |
TService debuggen
Hallole,
hab da mal ne prinzipielle Frage zu Diensten und deren Fehlersuche. Ich habe um Erfahrungen zu sammeln erst einmal einen minimalistischen Service geschrieben. Dieser Service ist genau so aufgebaut, wie es überall beschrieben wird. Jedoch habe ich irgendwo einen Fehler. So und jetz die Frage: Wie debugge ich einen Service? Den Hinweis "Mit Prozess verbinden" habe ich schon gefunden, aber mit was für einem Prozess? Kann mir jemand die ganze Geschichte verraten. Was passiert beim Prozess verbinden? Fragen nix als Fragen! Wer kann helfen? Gruss Frank :wiejetzt: |
Re: TService debuggen
Du kannst in deinem Service die procedure OutputDebugString() verwenden und mit dem Programm
![]() |
Re: TService debuggen
Hallo, soll das heißen, man kann einen Service nicht mit dem normalen Debugger durchforsten?
Das glaub ich nicht so ganz! Gruß Frank |
Re: TService debuggen
Zitat:
Zitat:
|
Re: TService debuggen
Hallo Bernhard,
ja genau das ist der Grund meiner Frage. Unter "Mit Prozess verbinden" erscheint mein Service nicht (Häkchen sind alle gesetzt). Muß der Service vorher installiert sein? ... Was mir gerade auffällt: Muß die EXE auf dem lokalen Rechner liegen? Die liegt bei mir nämlich auf einem Serverlaufwerk. |
Re: TService debuggen
Man kann sich nur mit Prozessen verbinden, welche monentan laufen. der Speicherort ist egal.
|
Re: TService debuggen
Zitat:
Zitat:
|
Re: TService debuggen
Zitat:
(weil Prozesse mit unterschiedlicher Berechtigung nicht mehr miteinander "können". In dem Fall wird man die UAC abdrehen müssen. |
Re: TService debuggen
Man kann auch mit aktivierter UAC problemlos Dienste debuggen. Zumindest mit Visual Studio 2005 (das ja ohnehin mit Admin-Rechten laufen muss) geht das wunderbar. Was du meinst, ist, dass ein Prozess nicht mehr ohne weiteres mit einem Prozess mit höheren Rechten kommunizieren kann.
Edit: Du kannst einen Dienst davon abgesehen auch so programmieren, dass man ihn als normale Anwendung starten und debuggen kann. Solange es um die normale Laufzeitfunktionalität geht (also nicht um dienstspezifische Dinge oder das Dienstaufstartverhalten), ist das auch ein gangbarer Weg. |
Re: TService debuggen
die IDE muss unter vista ja auch als administrator gestartet werden, sonst funktioniert sie imho nicht richtig.
|
Re: TService debuggen
Es macht ggf. Sinn, die TService-Klasse etwas aufzubohren.
Ich arbeite schon länger mit Diensten, die sich nicht nur als Service, sondern zusätzlich auch als Kommandozeilen-Programm starten lassen. Damit lässt sich sowas einwandfrei aus der IDE heraus debuggen, ohne den Dienst zu installieren und als Dienst zu starten. |
Re: TService debuggen
Zitat:
Magst ein bisserl mehr darüber erzählen? |
Re: TService debuggen
Ich befürchte, da das (leider) nicht auf meinem Mist gewachsen ist, dass ich da nicht viel drüber sagen darf.
|
Re: TService debuggen
ich würde es so machen:
Alle Programmlogik in eigene Klasse zusammenfassen und einmal in ein Service-Anwendung integrieren und einmal in eine normale Anwendung. |
Re: TService debuggen
Zitat:
|
Re: TService debuggen
Zitat:
|
Re: TService debuggen
Zitat:
Zitat:
Delphi-Quellcode:
hinzufügen. Schon bekommt man automatisch eine Konsole und damit einen Prozess geliefert. Man kann mit Writeln('TEXT'); sehr einfach Meldungen ausgeben und auch das Debuggen klappt super. Man muss nur das ganze wieder auskommentieren, wenn man den Service irgendwann als Dienst nutzen will ohne das ganze Debugging drum herum. Es wäre daher sehr hilfreich, die Debug-Ausgaben über eine Hilfsfunktion zu kapseln. Dabei kann man sich selber noch ein DEFINE bauen oder einfach auf einen Debugger prüfen:
{$APPTYPE CONSOLE}
Delphi-Quellcode:
oder wenn man sich neben {$APPTYPE CONSOLE} noch ein eigenes DEFINE baut:
procedure WriteConsole(Text: String);
begin If DebugHook <> 0 then Writeln(Text); end;
Delphi-Quellcode:
Wichtig: Dieses Define gilt nur für diese Unit!
{...}
{$DEFINE DEBUGSERVICE} {...} procedure WriteConsole(Text: String); begin {$IFDEF DEBUGSERVICE} Writeln(Text); {$ENDIF} end; Klappt bisher sehr gut - Feedback erwünscht :wink: |
Re: TService debuggen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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