Я хотел бы создать консольное exe-приложение, которое может быть запущено как автономное приложение, так и служба Windows. Можно ли это сделать? На самом деле, преимущества использования svchost?Как создать службу Windows, которая является автономным exe-приложением?
ответ
Перепишите основной метод ваших окон сервиса, как это, и это будет консольным приложением при запуске с 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 методы
+1, и мой ответ удален :) –
IIRC, вы также можете проверить Environment.UserInteractive, который намного чище, чем аргумент. Но я все еще использую «-c» самостоятельно; -p –
Выглядит очень приятно :) Каков наилучший способ установить его как сервис? Есть ли более простой способ, чем обычный класс установщика? – Grzenio
Лучший подход к этим случаям - подумать о понятии компонента.
В вашей стратегии должна быть разработана DLL со всей необходимой логикой.
После этого вы создаете консольное приложение и службу Windows, которые используют эту DLL.
Понятие компонентов и возможность их повторного использования тривиально и желательно.
Когда вам нужно изменить свою логику, вы должны изменить только DLL и заменить ее на старую. Вам не нужно какое-либо специальное развертывание.
Возможные дубликаты - 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