Мне нравится иметь возможность отлаживать каждый аспект моего сервиса, включая любую инициализацию в OnStart (), и в то же время выполнять его с полным поведением сервиса в рамках SCM ... без режима "console" или "app" ,
Я делаю это, создавая в том же проекте второй сервис для отладки. Служба отладки, когда она запускается как обычно (то есть в плагине MMC служб), создает процесс узла службы. Это дает вам процесс присоединения отладчика, даже если вы еще не запустили свой реальный сервис. После присоединения отладчика к процессу запустите реальную службу, и вы сможете взломать ее в любом месте жизненного цикла службы, включая OnStart ().
Поскольку это требует минимального вмешательства в код, сервис отладки может быть легко включен в ваш проект установки сервиса и легко удален из вашего рабочего выпуска, закомментировав одну строку кода и удалив один установщик проекта.
подробности:
1) Предполагая, что вы реализуете MyService
, также создайте MyServiceDebug
. Добавьте оба к массиву ServiceBase
в Program.cs
примерно так:
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService(),
new MyServiceDebug()
};
ServiceBase.Run(ServicesToRun);
}
2) Добавьте реальный сервис И сервис отладки в установщик проекта для сервисного проекта:
Обе службы (реальная и отладочная) включаются при добавлении выходных данных проекта службы в проект установки для службы. После установки обе службы появятся в плагине MMC service.msc.
3) Запустите службу отладки в MMC.
4) В Visual Studio присоедините отладчик к процессу, запущенному службой отладки.
5) Запустите реальный сервис и наслаждайтесь отладкой.