Я новичок в работе с Windows Services. Хотя я научился создавать службы Windows в VS2010, я хотел бы знать некоторые практические способы использования служб Windows?
Я попробовал поискать в Google с учетом текущего контекста только для того, чтобы найти больше руководств по созданию служб Windows.
РЕДАКТИРОВАТЬ на предложение Bounty:
Все ответы великолепны, но я искал более практичные примеры служб Windows и их последствия? Это поможет разработчикам узнать, когда уместно использовать их в тематическом исследовании.
Ответы:
Служба работает в фоновом режиме, даже если никто не вошел в систему на компьютере. Все, что вы можете себе представить, не желая, чтобы кто-то запускал приложение и нажимал кнопку, является хорошим кандидатом на услугу. Например, отслеживание папки и всякий раз, когда в нее записывается файл, обрабатывают его каким-либо образом. Любой «сервер», о котором вы только можете подумать - веб-сервер, FTP-сервер, почтовый сервер - это служба, и поэтому многие фоновые процессы вы не часто можете себе представить.
Некоторые вещи, которые когда-то были написаны как сервисы (резервные файлы в 2 часа ночи, отправка электронных писем с напоминаниями в 3 часа ночи и т. Д.), Вероятно, лучше выполнять сегодня как запланированные задачи, которые обладают огромной гибкостью в Windows 7 и более поздних версиях, но если разработчик их никогда не изучал или Система должна поддерживать XP, вы также найдете службы, выполняющие такие задачи.
источник
Сервисы в Windows - это программы, которые работают без графического интерфейса. Веб-серверы (такие как apache), серверы баз данных (такие как сервер mysql & sql), антивирусные ядра и серверы приложений / промежуточного программного обеспечения - все это практические примеры приложений, которые часто работают как сервисы. Может существовать GUI-клиент, позволяющий вам взаимодействовать со службой, но у самой службы его нет. Он просто работает "в фоновом режиме", делая свое дело. Кроме того, поскольку службы работают с назначенными им правами пользователей, они могут работать как назначенные им пользователи.действительно ли пользователь вошел в систему на компьютере. Таким образом, сервер базы данных будет иметь одинаковые права доступа независимо от того, кто в данный момент вошел в систему, если таковые имеются. Таким образом, вы можете понять, почему это важно - вы не хотите, чтобы пользователь оставался в системе, например, чтобы веб-сервер работал.
Они эквивалентны (в большинстве практических случаев) Windows демонам в * nix.
источник
обслуживание
Программа, подпрограмма или процесс, выполняющий определенную системную функцию для поддержки других программ, особенно на низком (близком к аппаратному) уровне. Когда службы предоставляются по сети, их можно публиковать в Active Directory, что упрощает администрирование и использование, ориентированное на службы.
Согласно определению сервиса, Window Service и другие типы сервисов выполняют множество функций. В этом контексте поисковые системы - ваш друг .
Службы Windows обычно используются, когда приложение должно работать постоянно. Вы должны создать службу Windows для запуска кода в фоновом режиме, без взаимодействия с пользователем .
Служба Windows будет работать, даже если никто не вошел в систему. Служба Windows может запускаться сразу после включения компьютера , что идеально подходит для работы в качестве сервера, например, http-сервера. Никто не обязан входить в систему.
Например, если им нужно:
Я бы воспользовался сервисом по следующим причинам:
Вы получаете некоторые встроенные команды управления бесплатно
o Пуск
o Остановить
o Пауза
o Продолжить
Вы можете обрабатывать события сервера, такие как завершение работы.
Ссылки с дополнительной информацией об этих услугах:
На Asp.net - // TODONT: используйте службу Windows только для запуска запланированного процесса.
Что такое служба WIndows?
источник
Интерактивная программа, такая как winform или WPF, - это то, что вы хотите, чтобы пользователь открывал, взаимодействовал и закрывал. Запланированное задание - это то, что вы хотите запускать в фоновом режиме в определенное время - может быть, просто запустить, сделать что-нибудь и остановить. Службы Windows является то , что вы хотите работать все время в фоновом режиме.
Некоторые преимущества службы Windows заключаются в том, что она работает независимо от того, какой пользователь вошел в систему (или даже если пользователи не вошли в систему), и ее можно настроить на запуск сразу после загрузки компьютера, что может быть очень полезно, если Система перезагружена.
Я обычно пользуюсь услугами, когда мне приходится отслеживать что-то вроде папки или почтового ящика.
источник
Поскольку вы добавили примечание о практических примерах к своему вопросу, я приведу несколько примеров сервисов, которые я написал для корпоративных приложений (вы не говорите, если вы программист корпоративных приложений, но я предполагаю, что большинство программистов на C # VS2010 таковы) , Я думаю, что вы ищете идею о том, что могли бы написать разработчики, которые не работают на Microsoft.
Служба мониторинга сердцебиения, которая проверяла, все ли еще запущены другие программы (возможно, она работала и как запланированная задача, но была реализована как служба).
Служба написания отчетов, которая работала с очередями запросов отчетов, запускала отчеты и отправляла их на разные принтеры в зависимости от того, какой принтер был занят. Это помогло разгрузить значительную часть работы от унаследованного приложения и позволило разделить запущенный отчет несколькими дешевыми блоками, на которых запущен сервис.
Он был реализован в виде службы, чтобы он мог работать непрерывно, запускаться автоматически при перезагрузке и иметь возможность использовать стандартный интерфейс служб Windows для запуска, остановки, приостановки и т. Д. Кроме того, если это было запланированное задание, ему потребуется инициировать получение данных из других программ или из постоянного источника (очередь, файл, база данных) вместо того, чтобы быть доступным для вызова другими программами (сокет, канал).
Серверная часть этого клиент-серверного приложения также была реализована как служба, чтобы она перезапускалась при перезагрузке и т. Д. Был другой проект с .exe, который запускал ту же программу, но не как службу, чтобы упростить отладка на машинах разработки.
Надеюсь, это поможет. Другие ответы - это более общие общие ответы, особенно идея, что запланированные задачи, вероятно, легче написать и администрировать для большинства целей сейчас.
источник
Есть много практических применений для службы. Одним из основных практических применений является взаимодействие между пользовательским интерфейсом и сервисными (или демонами в unix) программами, что в данном случае является разницей между клиентом и сервером. Сервер получает запросы, обрабатывает запрос и обычно отправляет ответ. Другими словами, он обслуживает запрос. Подумайте о SQLSERVER, IIS или telnet. Клиент, как правило, использует сервер, отправляя запросы на сервер и затем отображая или обрабатывая ответ. т.е. приложение для ввода данных, веб-приложение ... Сервер почти всегда устанавливается как служба в Windows (или демон в Unix), а клиент обычно является обычным приложением с графическим интерфейсом. Существует гораздо более сложное использование службы, но это, вероятно, вы будете использовать чаще всего.
Например: в настоящее время я работаю на видеосервере SIP / H323. Он получает запросы от приложения, используя SDK, который я написал, обрабатывает их и отвечает обратно. Приложение видеосервера устанавливается в качестве демона на встраиваемой машине Linux (это будет служба на встраиваемой машине Windows, но в любом случае использует Windows для встраивания), и любое приложение, использующее SDK, будет считаться клиентом.
Конечно, вы могли бы писать такие приложения, а не делать их сервисом. Вы по-прежнему можете запускать их при запуске Windows и запускать в фоновом режиме. Тем не менее, он включает в себя несколько записей реестра и некоторые ошибки в вашем коде - это гораздо проще сделать с помощью API, чем в чем-то вроде .NET. Microsoft, с другой стороны, сделала это намного проще, создав службы и разрешая нам регистрировать их в ОС. Это гораздо проще и проще реализовать, чем делать это вручную.
источник
Примеры программ-кандидатов:
Системы, которые должны отслеживать ресурсы / другие приложения и отправлять отчеты (активность пользователей, определенные виды файлового трафика, уведомления о неправильном поведении приложений)
Системы, которые предлагают услуги другим локальным приложениям (переводы, преобразование файлов, обмен сообщениями между системами)
Антивирусная программа.
Я думаю, что это большие примеры, которые не могут быть легко сделаны с помощью запланированных задач.
источник
Мои любимые примеры использования сервисов:
источник
Вот пример использования концепции сервиса с реальным кодом (см. Ниже).
Он настраивает служебную шину, которая потребляет данные из очереди и прослушивает сообщения от веб-серверов и клиентских графических интерфейсов.
Получая сообщения, он выполняет ту логику, которую требует домен, он сохраняет события на диск и публикует эти события в брокере сообщений.
Большинство больших приложений, которые слабо связаны, реализуют своего рода «рабочие» архитектуры, как показано ниже.
Проект Documently - это пример проекта, который мы создали для людей, подобных вам, для изучения распределенных архитектур. Вы можете задавать вопросы непосредственно мне в проекте, или разветвлять его и реализовать какую-то функцию для изучения, а затем отправить запрос на извлечение (и получить комментарии к коду).
https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :
источник
Некоторое время назад моя команда внедрила 3 службы Windows в банке здесь, в Бразилии, как показано ниже:
Интерфейс между системами: у нас было приложение для фронт-офиса, отвечающее за бронирование сделок на фондовом рынке, и приложение для бэк-офиса, отвечающее за учет и расчет комиссий за торги. Первоначально межсистемная связь осуществлялась непосредственно на SQL Server, но слишком много проблем с блокировкой и хранением приводили к тому, что система страдала от низкой производительности. Был реализован сервис для подключения к передней и задней базам данных и для правильного чтения / записи с использованием некоторой стратегии хранения (вместо записи каждой отдельной сделки на SQL Server, мы храним данные до некоторой степени, скажем, 1000 сделок, и выполнил массовую вставку, которая была в 40 раз быстрее, чем исходное решение, и долго не блокировал многие из задействованных таблиц).
Очередь сообщений. Наряду с предыдущим решением мы написали собственный обработчик очереди сообщений, чтобы несколько процедур пакетной обработки могли выполняться асинхронно. Это было интегрировано с MSMQ и IBM-MQSeries.
Централизация бизнес-сервисов. Например, нескольким пользовательским приложениям требовались общие данные в виде цен на акции, поэтому мы написали специальный сервис, отвечающий за получение «ценовых запросов» и отправку информации о ценах.
Один из аспектов, который побудил нас писать сервисы, а не «роботов», заключается в том, что сервисы могут запускаться от имени конкретного пользователя (как уже указывалось в этом потоке) и могут запускаться автоматически при загрузке машины.
Службам также не требуется рабочий стол или служба управления окнами. Они могут работать на фоне (ну, они должны работать на фоне).
И, если вы похожи на моих коллег, которые не любят писать пользовательские интерфейсы, сервисы - это большие технологические проблемы, потому что обычно они не должны выходить из строя. Так что очень интересно написать сервис. :)
источник
Если вы разрабатываете настольное приложение Windows, которое должно запускаться от имени обычного пользователя, но иногда требуется выполнить задачу, требующую прав администратора, вы можете использовать службу.
Ваш установщик устанавливает службу с необходимыми разрешениями, ваше настольное приложение вызывает службу, когда ей нужно выполнить задачу с правами администратора.
Этот подход имеет последствия для безопасности, которые выходят за рамки этого ответа.
источник
Для программистов основная причина использования сервиса:
Все, что вы пишете, должно соответствовать вышеприведенному, должно работать как служба Windows.
источник
Самая полезная услуга, которую я написал, с точки зрения конечного пользователя:
* Пользователь печатал счета UGLY на матричном принтере с драйвером печати RAW.
* Пользователь хотел выставить счет-фактуру PRETTY с логотипом и плавной графикой.
* Нет доступа к устаревшему коду.
Служба будет:
* Контролировать (несколько) папок принтера для заданий на печать.
* Создайте PDF счета.
* PDF будет «лежать под» красивым пустым изображением счета-фактуры.
* Наложить необработанный текст.
* Искать метаданные на основе используемой папки (IE: используется принтер).
Затем метаданные будут:
* Создавать PDF
* и / или печатать PDF
* и / или подайте PDF в конечную папку назначения
* и / или удалите PDF
* и / или отправьте счет в формате PDF клиенту
В этом случае он обрабатывает ghost-script, PLC и движки PDF. Он работает очень чисто в течение многих лет. Включите файлы журнала !!!
источник