Мне записали сервис окон в C#. Я считал все потоки Google о том, как отладить его, но я все еще не могу заставить это работать. Я выполнил "PathTo. NetFramework\InstallUtil.exe C:\MyService.exe". Это сказало, что установка была успешна, однако когда я выполняю "Services.msc", сервис не отображен вообще, нигде. Если я вхожу в Диспетчер задач, существует процесс, названный "MyService.vshost.exe". Вполне уверенный это не это, потому что это - обслуживание, не процесс.
Если я, как предполагается, вижу сервис, когда я выполняю Services.msc? (Принимающий во внимание это все делается на локальной машине, без серверов ВООБЩЕ.
Я выполняю VS2008.
Это все делается на моей локальной машине, у меня нет серверов или доступа ни к кому. Кроме того, я даже не знаю то, что делает сервис, я хочу отладить его так, я могу пошаговая демонстрация код и видеть, как все это работает (код в сервисе, не самом сервисе - для любого из Вас штаны присяжного острослова, которые могли бы предложить, чтобы я посмотрел на шаблон).
НИ ОДИН ИЗ НИХ не РАБОТАЕТ! Каждый раз я пробую что-то, что я получаю некоторое сообщение о необходимости использовать СЕТЕВОЙ ЗАПУСК или установить сервис.
Я выполняю 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".
Именно.
Я только хотел установить и отладить его. Я знаю, что это работает (как он, это работает и не отказывает). Но код был написан другом, и я хочу понять базовый код путем обхода через него в режиме отладки.
Рекомендую следующий шаблон для отладки:
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, иначе ничего не получится.
Допущения:
1) У вас есть исходный код, доступный в виде Решение в IDE VS2008
Как я отлаживаю службы C #:
InstallUtil
. (Кажется, вы уже это сделали) bin
вашего Решения Поместите что-то вроде следующего в начало метода OnStart ()
вашей службы:
while (true)
{
System.Threading.Thread.Sleep (500) ;
}
Установите точку останова на System.Threading.Thread.Sleep (500)
Создайте решение
Запустите службу с помощью Windows Служебная программа
Во время запуска службы в VS2008 перейдите к Отладка -> Присоединиться к процессам ...
Убедитесь, что Показать процессы от всех пользователей
и Показать процессы во всех Сеансы
проверены
Найдите свой MyService.exe в списке и нажмите Присоединить
Теперь вы должны быть в точке останова, которую вы вставили в бесконечный цикл.
Перетащите элемент управления (желтая стрелка) только вне бесконечного цикла
Отлаживайте!
Заявление об ограничении ответственности:
Не забудьте удалить бесконечный цикл, когда вы хотите выпустить сборку или просто хотите запустить службу в обычном режиме.
Если ваш бизнес-уровень отделен от службы Windows, вы можете протестировать все свои бизнес-функции за пределами службы Windows.
Для тестирования службы Windows мне нравится создавать тестовый проект, представляющий собой консольное приложение, и я запускаю новый поток, который запускает мою службу.
System.Threading.Thread sftpThread = new System.Threading.Thread((ThreadStart)service1);
service1.Start();
Я недавно добавил это в проект, и он отлично мне подходит. Вы можете отлаживать его, как и любой другой 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
вы можете отладить его, подключив отладчик к процессу. Вы можете сделать это, либо добавив строку при запуске вашей программы:
Debugger.Launch ();
после добавления оператора using:
using System.Diagnostics;
вам нужно будет либо поместить его в условный блок, либо удалить его, когда вы закончите отладку
или запустив службу и подключившись к процессу вручную из среды IDE: Отладка-> Подключить к процессу ..