Как я могу создать службу Windows, которая является отдельным приложением EXE? - PullRequest
3 голосов
/ 17 июля 2009

Я хотел бы создать консольное exe-приложение, которое может запускаться как отдельное приложение, а также как служба Windows. Возможно ли это сделать? Каковы преимущества использования svchost?

Ответы [ 2 ]

14 голосов
/ 17 июля 2009

Перепишите основной метод вашей службы Windows следующим образом, и это будет консольное приложение, если вы запустите с параметром -c, и да, не забудьте изменить тип проекта на консоль из окна свойств проекта

 public static void Main(string[] args)
 {
      Service service = new Service();
      if (args.Contains("-c", StringComparer.InvariantCultureIgnoreCase) || args.Contains("-console", StringComparer.InvariantCultureIgnoreCase))
      {
           service.StartService(args);
           Console.ReadLine();
           service.StopService();
           return;
      }
      ServiceBase[] ServicesToRun = new ServiceBase[] 
                                    { 
                                        service 
                                    };
      ServiceBase.Run(ServicesToRun);           
  }

StartService и StopService просто вызывают переопределенные методы OnStart и OnStop

2 голосов
/ 17 июля 2009

Лучший подход к этому случаю - подумать о понятии компонента.

Ваша стратегия должна заключаться в разработке DLL со всей необходимой логикой.

После этого вы создаете консольное приложение и службу Windows, которые используют эту DLL.

Понятие компонентов и возможность их повторного использования тривиально и желательно.

Когда вам нужно изменить свою логику, вы должны только изменить DLL и заменить ее старой. Вам не нужно никакого специального развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...