- Хроники. - -
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
Click here to print.
Copyright © 2008 Все, что меня окружает. All rights reserved.