Anbindung an den Dienst sollte funktionieren, also weiß ich nicht, warum Sie das nicht können. Fügen Sie stattdessen die folgende Zeile in den Anwendungseinstiegspunkt für Ihren Windows-Dienst (oder die OnStart()-Methode) ein, kompilieren Sie im Debug-Modus und starten Sie den Dienst.
System.Diagnostics.Debugger.Break();
Wenn Sie den Dienst starten, werden Sie aufgefordert, den Prozess zu debuggen. Wählen Sie den Visual Studio 2008-Debugger, und der Prozess wird geladen und an Ihrem programmatischen Haltepunkt angehalten. Drücken Sie F5, um die Ausführung erneut zu starten.
EDIT:
Nehmen wir an, Sie haben den Dienst erstellt (Release-Modus oder Debug-Modus - das spielt keine Rolle) und installutil verwendet, um den Dienst zu installieren, aber Sie haben ihn noch nicht gestartet. Solange der Dienst pas laufen, können Sie weiterhin Codeänderungen vornehmen und neu kompilieren. Wenn Sie den Dienst starten, wird Ihr Dienst Ihre letzten Codeänderungen widerspiegeln. Wenn der Dienst es ausgeführt wird, können Sie den Dienst nicht vollständig kompilieren, da die Exe/Dll(s) in Gebrauch sind und nicht ersetzt werden können. Natürlich können Sie den Dienst einfach anhalten, neu kompilieren und dann neu starten. Der Punkt ist folgender: Sie müssen den Dienst nicht deinstallieren, um den Code zu ändern. Halten Sie es einfach an, ändern Sie den Code, kompilieren Sie neu und starten Sie es erneut.
Was das Debuggen im Debug-Modus im Vergleich zum Release-Modus betrifft, so weiß ich nicht, ob das der Grund ist, warum man sich nicht an den Prozess anhängen kann. Ich weiß, dass es möglich ist, Release-Versionen zu debuggen, aber ich würde das nicht empfehlen, einfach weil man bei aktivierten Optimierungen auf Probleme beim Durchlaufen des Codes stoßen kann. Wir haben das Debugging im Versionsmodus nur als letzten Ausweg benutzt.
Wenn Sie eine Visual Studio-Anwendung im Debug-Modus erstellen, wird sie standardmäßig in eine bin \Debug Unterverzeichnis Ihres Projekts. Wenn Sie im Release-Modus bauen, wird die ausführbare Datei in ein bin \Release Unterverzeichnis. Wenn Sie installutil verwenden, um Ihren Dienst zu installieren, ist das Einzige, was zählt, der Ort, an dem sich der Dienst befindet. In Ihrem Fall würde ich vorschlagen, die Release-Mode-Version Ihres Dienstes zu deinstallieren ( installutil /u c:\myapp\myapp\bin\release\myapp.exe
), den programmatischen Haltepunkt setzen, die Debug-Version erstellen und dann installutil verwenden, um die Debug-Version zu installieren (aus dem bin \Debug Verzeichnis).
Tut mir leid, dass das so langatmig war. Ich hoffe, das ist klar.
0 Stimmen
Ich habe meine Antwort auf Ihre Frage hin aktualisiert.