Сервис окон отладки

Сценарий

Мне записали сервис окон в C#. Я считал все потоки Google о том, как отладить его, но я все еще не могу заставить это работать. Я выполнил "PathTo. NetFramework\InstallUtil.exe C:\MyService.exe". Это сказало, что установка была успешна, однако когда я выполняю "Services.msc", сервис не отображен вообще, нигде. Если я вхожу в Диспетчер задач, существует процесс, названный "MyService.vshost.exe". Вполне уверенный это не это, потому что это - обслуживание, не процесс.

Кто-то может объяснить мне?

Если я, как предполагается, вижу сервис, когда я выполняю Services.msc? (Принимающий во внимание это все делается на локальной машине, без серверов ВООБЩЕ.

Другое

Я выполняю VS2008.

Править:

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

РЕДАКТИРОВАНИЕ 2:

НИ ОДИН ИЗ НИХ не РАБОТАЕТ! Каждый раз я пробую что-то, что я получаю некоторое сообщение о необходимости использовать СЕТЕВОЙ ЗАПУСК или установить сервис.

РЕДАКТИРОВАНИЕ 3:

Я выполняю VS2008.

Я ввел это: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\dev\Restarter\bin\Release\Restarter.exe

Я получил это: Copyright (c) версии программы 2.0.50727.3053 Microsoft (R).NET Framework Installation Microsoft Corporation.Все права защищены.

Выполнение проведенной установки.

Начало фазы Установки установки. Посмотрите содержание файла журнала для прогресса C:\dev\Restarter\bin\ Release\Restarter.exe блока. Файл расположен в C:\dev\Restarter\bin\Release\EDT.Restar трижды. InstallLog. Установка блока 'C:\dev\Restarter\bin\Release\Restarter.exe'. Затронутые параметры: logtoconsole = assemblypath = C:\dev\Restarter\bin\Release\Restarter.exe файл журнала = C:\dev\Restarter\bin\Release\Restarter.InstallLog

Фаза Установки, завершенная успешно и фаза Фиксации, начинаются. Посмотрите содержание файла журнала для прогресса C:\dev\Restarter\bin\ Release\Restarter.exe блока. Файл расположен в C:\dev\Restarter\bin\Release\Restar ter.InstallLog. Фиксация блока 'C:\dev\Restarter\bin\Release\Restarter.exe'. Затронутые параметры: logtoconsole = assemblypath = C:\dev\Restarter\bin\Release\Restarter.exe файл журнала = C:\dev\Restarter\bin\Release\Restarter.InstallLog

Фаза Фиксации завершается успешно.

Проведенная установка завершилась.

C:\Program Files\Microsoft Visual Studio 9.0\VC>

Я затем перешел к ВЫПОЛНЕННОМУ->, Services.msc I ничего не видит там.

Существует процесс в Диспетчере задач под названием "Restarter.vshost.exe".

Именно.

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

41
задан John Saunders 13 April 2010 в 19:47
поделиться

5 ответов

Рекомендую следующий шаблон для отладки:

 var ServiceToRun = new SomeService(); 
 if (Environment.UserInteractive)
 {
    // This used to run the service as a console (development phase only)

    ServiceToRun.Start();

    Console.WriteLine("Press Enter to terminate ...");
    Console.ReadLine();

    ServiceToRun.DoStop();
 }
 else
 {
    ServiceBase.Run(ServiceToRun);
 }

Edit: убедитесь, что ваша цель - Console Application, а не Windows Application, иначе ничего не получится.

116
ответ дан 27 November 2019 в 00:06
поделиться

Допущения:

1) У вас есть исходный код, доступный в виде Решение в IDE VS2008

Как я отлаживаю службы C #:

  1. Установите службу с помощью InstallUtil . (Кажется, вы уже это сделали)
  2. (При необходимости) Измените путь службы на файл MyService.exe, который создается в папке bin вашего Решения
  3. Поместите что-то вроде следующего в начало метода OnStart () вашей службы:

     while (true) 
     {
    System.Threading.Thread.Sleep (500) ; 
    } 
     
  4. Установите точку останова на System.Threading.Thread.Sleep (500)

  5. Создайте решение

  6. Запустите службу с помощью Windows Служебная программа

  7. Во время запуска службы в VS2008 перейдите к Отладка -> Присоединиться к процессам ...

  8. Убедитесь, что Показать процессы от всех пользователей и Показать процессы во всех Сеансы проверены

  9. Найдите свой MyService.exe в списке и нажмите Присоединить

  10. Теперь вы должны быть в точке останова, которую вы вставили в бесконечный цикл.

  11. Перетащите элемент управления (желтая стрелка) только вне бесконечного цикла

  12. Отлаживайте!

Заявление об ограничении ответственности:

Не забудьте удалить бесконечный цикл, когда вы хотите выпустить сборку или просто хотите запустить службу в обычном режиме.

2
ответ дан 27 November 2019 в 00:06
поделиться

Если ваш бизнес-уровень отделен от службы Windows, вы можете протестировать все свои бизнес-функции за пределами службы Windows.

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

System.Threading.Thread sftpThread = new System.Threading.Thread((ThreadStart)service1);
service1.Start();
0
ответ дан 27 November 2019 в 00:06
поделиться

Я недавно добавил это в проект, и он отлично мне подходит. Вы можете отлаживать его, как и любой другой EXE. После его добавления перейдите в свойства проекта и добавьте параметр командной строки (/ EXE) на вкладке «Отладка» для конфигурации сборки отладки.

<MTAThread()> _
Shared Sub Main()

    '' 
    '' let's add a command line parameter so we can run this as a regular exe or as a service
    ''
    If Command().ToUpper() = "/EXE" Then
        Dim app As MyService = New MyService()

        app.OnStart(Nothing)
        Application.Run()
    Else
        Dim ServicesToRun() As System.ServiceProcess.ServiceBase

        ' More than one NT Service may run within the same process. To add
        ' another service to this process, change the following line to
        ' create a second service object. For example,
        '
        '   ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
        '
        ServicesToRun = New System.ServiceProcess.ServiceBase() {New MyService}

        System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End If
End Sub
0
ответ дан 27 November 2019 в 00:06
поделиться

вы можете отладить его, подключив отладчик к процессу. Вы можете сделать это, либо добавив строку при запуске вашей программы:

Debugger.Launch ();

после добавления оператора using:

using System.Diagnostics; 

вам нужно будет либо поместить его в условный блок, либо удалить его, когда вы закончите отладку

или запустив службу и подключившись к процессу вручную из среды IDE: Отладка-> Подключить к процессу ..

23
ответ дан 27 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: