- Хроники. - -

C#: Запуск Windows сервисов как консольных приложений

Posted By Ikutsin On 15 сентября 2011 @ 11:50 In .NET C# | Comments Disabled

[1]В Visual Studio есть шаблон для создания сервисов. Проблема в том, что запустится они могут только с помощью SVCUTIL, а это отнимает время на сопровождение (обычный F5 гораздо удобней и быстрее). Еще возникают неудобства с отладкой — конечно, Debugger.Launch() никто не отменял, но эти 5 секунд хлопанья по окошкам для подключения программы к студии быстро достают. Это простой пример того, как запустить службу как консоль. Сразу скажу, что это не работает Mono из-за некорректного значения в UserInteractive:

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Reflection;
using System.Diagnostics;

namespace Proj.ServiceProcess
{
static class ServiceProgram
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
ServiceBase[] servicesToRun = new ServiceBase[]
			{
				new MyServiceProcess()
			};

if (Environment.UserInteractive)
{
Type type = typeof(ServiceBase);
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
MethodInfo method = type.GetMethod("OnStart", flags);

foreach (ServiceBase service in servicesToRun)
{
method.Invoke(service, new object[] { args });
}

Console.WriteLine("Press any key to exit");
Console.ReadLine();

foreach (ServiceBase service in servicesToRun)
{
service.Stop();
}

}
else
{
ServiceBase.Run(servicesToRun);
}
}
}
}

Код предпологает, что MyServiceProcess это класс вашей службы.


Article printed from Хроники.:

URL to article: /2149-c-zapusk-windows-servisov-kak-konsolnyx-prilozhenij

URLs in this post:

[1] Image: /wp-content/uploads/2011/09/exetoservice.png

Copyright © 2008 Все, что меня окружает. All rights reserved.