- Хроники. - -
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.