2009-07-17 1 views
3

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

+0

Возможные дубликаты - http://stackoverflow.com/questions/355579/my-exe-runs-fine-by-itself-but-does-nothing-when-loaded-by-a-service & http: // stackoverflow.com/questions/165951/how-can-i-run-a-cli-application-as-a-windows-service – ChrisF

ответ

14

Перепишите основной метод ваших окон сервиса, как это, и это будет консольным приложением при запуске с Parametr -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 методы

+0

+1, и мой ответ удален :) –

+0

IIRC, вы также можете проверить Environment.UserInteractive, который намного чище, чем аргумент. Но я все еще использую «-c» самостоятельно; -p –

+0

Выглядит очень приятно :) Каков наилучший способ установить его как сервис? Есть ли более простой способ, чем обычный класс установщика? – Grzenio

2

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

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

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

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

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