Odkąd pracuję z Visual Studio tworzenie usług sytemu Windows (ang. Windows service), zawsze było żmudnym procesem. Co by nie powiedzieć o usprawnieniach wprowadzanych w kolejnych wersjach środowiska, proces ten nie uległ znaczącym zmianom. Chyba największym problemem jest pracochłonny i kłopotliwy proces testowania, który wymaga wykonania następujących kroków:
- Zainstalowania naszej usługi w systemie, konieczny jest do tego specyficzny instalator - opis jak takowy przygotować można znaleźć m.in. tutaj. Sam projekt powinien być skompilowany w trybie Debug, aby zachować informacje o ustawionych breakpoint’ach.
- Do katalogu w którym zainstalowaliśmy naszą program, kopiujemy plik *.pdb który znajdziemy w katalogu bin naszego projektu.
- Uruchamiamy usługę. Możemy skorzystać z Panelu Sterowania lub wystukać na linki komend net start “nazwa naszej usługi”
- Uruchamiamy Visual Studio i z menu Tools wybieramy Attach to Process (lub wciskamy: Ctrl + Alt + P), pojawia się przed nami następujące okienko:

- Z listy dostępnych procesów wybieramy ten reprezentujący naszą usługę. Ponieważ, zwykle usługi działają ze specjalnymi uprawnieniami, musimy najpierw zaznaczyć opcję Show processes from all users.
- Klikamy Attach i Visual Studio podłączy się do naszego procesu. Dzięki skopiowanemu wcześniej plikowi *.pdb, zawierającemu symbole debugowania środowisko będzie wstanie określić położenie kodu źródłowego naszej aplikacji. W przypadku gdy źródła będą niedostępne, zostaniemy poproszeni o podanie ich położenia.
- I możemy swobodnie debugować.
Niestety, cały proces musimy powtórzyć gdy zmodyfikujemy kod i ponownie chcemy go przetestować.
Problemem jaki możemy napotkać po drodze są kłopoty z ponowną instalacją naszej usługi, komunikat:

Nie doszedłem czym jest on spowodowany, jednak podejrzewam, że nie wszystko zostało, prawidłowo usunięte podczas wcześniejszej de-instalacji. Aby temu zaradzić, musimy ręcznie odinstalować usługę. Z linii komend wpisujemy polecenie:
sc delete “nazwa naszej usługi”
Wszystko powyższe sprawdza się jeśli korzystamy z systemu Windows XP, jeśli jednak używamy osławionej Visty. W liście procesów okna Attach to Process, nie pojawi się pozycja reprezentująca naszą aplikację. Ma to prawdopodobnie ma to związek z nową architekturą zabezpieczeń systemu. W takim wypadku ‘zewnętrze’ podłączenie środowiska do procesu możemy zastąpić jedną linią kodu, która spowoduje automatyczne uruchomienie debugger’a:
System.Diagnostics.Debugger.Launch();
Oczywiście nie zmienia to faktu, że musimy naszą usługę zainstalować i przekopiować odpowiednie pliki. Inną użytecznym poleceniem może być:
System.Diagnostics.Debugger.Break();
która wymusi wstrzymanie wykonania programu. Dobrze jest umieścić powyższe metody w dyrektywie kompilacji warunkowej, aby przypadkiem nie zostały, częścią finalnej wersji programu.
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif