Практическое руководство. Отладка приложений служб Windows

Предупреждение

Эта документация не относится к последней версии службы Windows. Последние сведения об использовании BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:

Служба должна запускаться из диспетчера управления службами, а не из Visual Studio. Поэтому, процесс отладки службы сложнее, чем отладка приложений Visual Studio других типов. Для отладки службы необходимо запустить службу, а затем подключить отладчик к процессу, в котором она выполняется. Приложение можно отлаживать с помощью всех стандартных средств отладки Visual Studio.

Внимание

Не следует присоединять к процессу, если неизвестно, что собой представляет данный процесс, и неясны последствия подключения к процессу (включая даже уничтожение этого процесса). Например, при подключении к процессу WinLogon и последующей остановке процесса отладки система будет остановлена, так как она не может работать без этого процесса.

Отладчик можно прикреплять только к выполняющейся службе. Процесс подключения прерывает текущую работу службы (фактически он не останавливает и не приостанавливает ее). То есть, если служба уже выполнялась на момент запуска процесса отладки, она по-прежнему технически находится в состоянии "Started" в ходе отладки, однако ее работа приостанавливается.

После присоединения к процессу можно установить точки останова и использовать их для отладки кода. После выхода из диалогового окна, используемого для подключения к процессу, вы продолжаете оставаться в режиме отладки. Для запуска, остановки, приостановки и продолжения работы служб (то есть, попадания в заданные точки) можно использовать диспетчер управления службами. Позднее эту фиктивную службу можно удалить после успешного завершения отладки.

В этой статье рассматривается процесс отладки службы, выполняемой на локальном компьютере (также можно выполнять отладку служб Windows, которые выполняются на удаленном компьютере). См. статью об удаленной отладке.

Примечание.

Процесс отладки метода OnStart может быть сложным, так как диспетчер управления службами накладывает ограничение в 30 секунд на все попытки запуска службы. Дополнительные сведения см. в статье Устранение неполадок: отладка служб Windows.

Предупреждение

Для получения значимой информации для отладки отладчик Visual Studio должен найти файлы символов для двоичных файлов, для которых выполняется отладка. При отладке службы, созданной в Visual Studio, файлы символов (PDB-файлы) находятся в той же папке, что и исполняемый файл или библиотека, и отладчик загружает их автоматически. При отладке службы, которая не была построена, сначала следует найти символы для службы и убедиться, что они могут быть найдены отладчиком. См. руководство по определению файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio. Если вы выполняете отладку системного процесса или хотите иметь символы для системных вызовов в своих службах, то необходимо добавить серверы символов Майкрософт. См. статью об отладке с помощью символов.

Отладка службы

  1. Постройте службу в конфигурации отладки.

  2. Установите службу. Для получения дополнительной информации см. How to: Install and Uninstall Services.

  3. Запустите службу из диспетчера служб, обозревателя сервера или из кода. Дополнительные сведения см. в практическом руководстве по запуску служб.

  4. Запустите Visual Studio с учетными данными администратора, чтобы вы могли подключиться к системным процессам.

  5. (Необязательное действие.) В строке меню Visual Studio последовательно выберите Инструменты и Параметры. В диалоговом окне Параметры последовательно выберите Отладка и Символы, установите флажок Серверы символов Microsoft и нажмите кнопку ОК.

  6. В строке меню в меню Отладка или Инструменты выберите пункт Присоединение к процессу. (Комбинация клавиш: Ctrl+Alt+P)

    Откроется диалоговое окно Процессы.

  7. Установите флажок Показать процессы, запущенные всеми пользователями.

  8. В разделе Доступные процессы выберите процесс для службы и нажмите кнопку Присоединиться.

    Совет

    Процесс будет иметь то же имя, что и исполняемый файл для службы.

    Откроется диалоговое окно Присоединение к процессу .

  9. Выберите соответствующие параметры, а затем нажмите кнопку ОК, чтобы закрыть диалоговое окно.

    Примечание.

    Теперь вы находитесь в режиме отладки.

  10. Установите точки останова, которые буден нужно использовать в коде.

  11. Откройте диспетчер управления службами и выполните несколько операций со своей службой (выполните команды остановки, приостановки и продолжения), чтобы обнаружить свои точки останова. Дополнительные сведения о запуске диспетчера служб см. в статье Практическое руководство. Запуск служб. Также см. статью Устранение неполадок: отладка служб Windows.

Советы по отладке для служб Windows

Присоединение к процессу службы позволяет отлаживать основную часть кода (но не весь код) для этой службы. Например, так как служба уже была запущена, нельзя выполнять отладку кода в методе OnStart службы или кода в методе Main, который используется для загрузки службы подобным образом. Одним из способов обхода этого ограничения является создание временной второй службы в приложении службы, которая предназначена только для отладки. Можно установить обе службы,а затем запустить эту фиктивную службу для загрузки процесса службы. Когда временная служба запустит процесс, в Visual Studio в меню Отладка можно будет присоединиться к процессу службы.

Попробуйте добавлять вызовы в метод Sleep, чтобы задержать выполнение действия, пока вы не подключитесь к процессу.

Попробуйте заменить программу на обычное консольное приложение. Для этого измените метод Main следующим образом, чтобы он мог быть запущен и как служба Windows, и как консольное приложение (в зависимости от способа запуска).

Запуск службы Windows как консольного приложения

  1. Добавьте метод в свою службу, которая запускает методы OnStart и OnStop:

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Перепишите метод Main следующим образом:

    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. В окне свойств проекта на вкладке Приложение задайте для параметра Тип выходных данных значение Консольное приложение.

  4. Щелкните Начать отладку (F5).

  5. Чтобы снова запустить программу как службу Windows, установите ее и запустите обычным образом (для службы Windows). Отменять эти изменения необязательно.

В некоторых случаях, например, если требуется устранить некоторую проблему, которая возникает только при запуске системы, необходимо использовать отладчик Windows. Скачайте набор драйверов Windows (WDK) и узнайте о способах отладки служб Windows.

См. также