Instrukcje: Debugowanie aplikacji usług systemu Windows

Ostrzeżenie

Ta dokumentacja nie dotyczy najnowszej wersji usługi Windows Service. Aby uzyskać najnowszą zawartość na Windows services using BackgroundService i szablon usługi procesu roboczego, zobacz:

Usługa musi być uruchamiana z poziomu menedżera kontroli usług, a nie z poziomu Visual Studio. Z tego powodu debugowanie usługi nie jest tak proste jak debugowanie innych Visual Studio typów aplikacji. Aby debugować usługę, należy uruchomić usługę, a następnie dołączyć debuger do procesu, w którym jest uruchomiona. Następnie możesz debugować aplikację przy użyciu wszystkich standardowych funkcji debugowania Visual Studio.

Przestroga

Nie należy dołączać do procesu, chyba że wiesz, czym jest ten proces, i rozumiesz konsekwencje dołączania do procesu i jego ewentualnego zabicia. Jeśli na przykład dołączysz do procesu WinLogon, a następnie zatrzymasz debugowanie, system zostanie zatrzymany, ponieważ nie będzie działać bez winLogon.

Debuger można dołączyć tylko do uruchomionej usługi. Proces załącznika przerywa bieżące działanie usługi; W rzeczywistości nie zatrzymuje ani nie wstrzymuje przetwarzania usługi. Oznacza to, że jeśli usługa jest uruchomiona po rozpoczęciu debugowania, jest ona nadal w stanie Uruchomiono podczas debugowania, ale jej przetwarzanie zostało wstrzymane.

Po dołączeniu do procesu można ustawić punkty przerwania i użyć ich do debugowania kodu. Po zakończeniu działania okna dialogowego służącego do dołączania do procesu będziesz efektywnie działać w trybie debugowania. Menedżer sterowania usługami umożliwia uruchamianie, zatrzymywanie, wstrzymywanie i kontynuowanie usługi, w związku z tym trafianie punktów przerwania ustawionych przez użytkownika. Później możesz usunąć tę fikcyjną usługę po pomyślnym debugowaniu.

W tym artykule o mowa o debugowaniu usługi uruchomionej na komputerze lokalnym, ale można również debugować usługi Windows, które są uruchomione na komputerze zdalnym. Zobacz Zdalne debugowanie.

Uwaga

Debugowanie OnStart metody może być trudne, ponieważ Menedżer sterowania usługami nakłada 30-sekundowy limit na wszystkie próby uruchomienia usługi. Aby uzyskać więcej informacji, zobacz Troubleshooting: Debugging Windows Services (Rozwiązywanie problemów: Windows Services).

Ostrzeżenie

Aby uzyskać istotne informacje dotyczące debugowania, Visual Studio musi znaleźć pliki symboli dla debugowanych plików binarnych. W przypadku debugowania usługi wbudowanej w program Visual Studio pliki symboli (pliki .pdb) znajdują się w tym samym folderze co plik wykonywalny lub biblioteka, a debuger ładuje je automatycznie. W przypadku debugowania usługi, która nie jest kompilowana, należy najpierw znaleźć symbole dla usługi i upewnić się, że są one dostępne w debugerze. Zobacz Specify Symbol (.pdb) and Source Files in the Visual Studio Debugger (Określ symbol (.pdb) i Pliki źródłowe w Visual Studio debugerze. Jeśli debugujesz proces systemowy lub chcesz mieć symbole dla wywołań systemowych w swoich usługach, dodaj serwery symboli firmy Microsoft. Zobacz Symbole debugowania.

Aby debugować usługę

  1. Skompilowanie usługi w konfiguracji debugowania.

  2. Zainstaluj usługę. Aby uzyskać więcej informacji, zobacz Instalowania i odinstalowywania usług.

  3. Uruchom usługę z Menedżera kontroli usług, Eksplorator serwera lub z kodu. Aby uzyskać więcej informacji, zobacz How to: Start Services (Jak uruchomić usługi).

  4. Rozpocznij Visual Studio przy użyciu poświadczeń administracyjnych, aby można było dołączać je do procesów systemowych.

  5. (Opcjonalnie) Na pasku Visual Studio wybierz pozycję Narzędzia, Opcje. W oknie dialogowym Opcje wybierz pozycję Debugowanie, Symbole, zaznacz pole wyboru Microsoft Symbol Servers, a następnie wybierz przycisk OK.

  6. Na pasku menu wybierz pozycję Dołącz do procesu z menu Debugujlub Narzędzia. (Klawiatura: Ctrl+Alt+P)

    Zostanie wyświetlone okno dialogowe Procesy.

  7. Zaznacz pole wyboru Pokaż procesy od wszystkich użytkowników.

  8. W sekcji Dostępne procesy wybierz proces dla usługi, a następnie wybierz pozycję Dołącz.

    Porada

    Proces będzie miał taką samą nazwę jak plik wykonywalny usługi.

    Zostanie wyświetlone okno dialogowe Dołączanie do procesu.

  9. Wybierz odpowiednie opcje, a następnie wybierz przycisk OK , aby zamknąć okno dialogowe.

    Uwaga

    Jesteś teraz w trybie debugowania.

  10. Ustaw wszystkie punkty przerwania, których chcesz użyć w kodzie.

  11. Uzyskaj dostęp do Menedżera kontroli usług i manipuluj usługą, wysyłając polecenia zatrzymania, wstrzymania i kontynuowania w celu trafienia punktów przerwania. Aby uzyskać więcej informacji na temat uruchamiania Menedżera sterowania usługami, zobacz How to: Start Services (How to: Start Services). Zobacz też Troubleshooting: Debugging Windows Services (Rozwiązywanie problemów: Windows usługami).

Debugowanie Wskazówki dla Windows usług

Dołączanie do procesu usługi umożliwia debugowanie większości, ale nie wszystkich, kodu dla tej usługi. Ponieważ na przykład usługa została już uruchomiona, OnStartMain nie można debugować kodu w metodzie usługi ani kodu w metodzie używanej do ładowania usługi w ten sposób. Jednym ze sposobów na rozwiązanie tego ograniczenia jest utworzenie tymczasowej drugiej usługi w aplikacji usługi, która istnieje tylko w celu pomocy w debugowaniu. Możesz zainstalować obie usługi, a następnie uruchomić tę fikcyjną usługę, aby załadować proces usługi. Po zakończeniu procesu przez usługę tymczasową możesz użyć menu Debugowanie w Visual Studio do dołączenia do procesu usługi.

Spróbuj dodać wywołania do metody Sleep , aby opóźnić akcję do momentu dołączenia do procesu.

Spróbuj zmienić program na zwykłą aplikację konsolowa. Aby to zrobić, Main należy ponownie napisać metodę w następujący sposób, aby można ją było uruchomić zarówno jako Windows Service, jak i jako aplikacja konsolowa, w zależności od sposobu jej uruchomienia.

How to: Run a Windows Service as a console application (Jak uruchomić usługę Windows jako aplikację konsolową)

  1. Dodaj do usługi metodę , która uruchamia metody OnStart i OnStop :

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Ponownie napisać metodę Main w następujący sposób:

    static void Main(string[] args)  
    {  
        if (Environment.UserInteractive)  
        {  
            MyNewService service1 = new MyNewService(args);  
            service1.TestStartupAndStop(args);  
        }  
        else  
        {  
            // Put the body of your old Main method here.  
        }  
    }
    
  3. Na karcie Aplikacja we właściwościach projektu ustaw wartość Typ danych wyjściowych na Aplikacja konsolowa.

  4. Wybierz pozycję Rozpocznij debugowanie (F5).

  5. Aby ponownie uruchomić program jako Windows Service, zainstaluj go i uruchom w zwykły sposób dla usługi Windows Service. Nie trzeba odwracać tych zmian.

W niektórych przypadkach, na przykład gdy chcesz debugować problem, który występuje tylko podczas uruchamiania systemu, musisz użyć Windows debugera. Pobierz zestaw Windows Driver Kit (WDK) i zobacz How to debug Windows Services (Jak debugować Windows Services).

Zobacz też