Запуск по триггеру что это
Автоматический (запуск по триггеру) и ручной (запуск по триггеру) для служб Windows
Службы Windows — это типы программ, которые могут запускаться сами по себе в фоновом режиме или когда событие может запускать и останавливать их. Эти службы можно запускать или останавливать с помощью типа взаимодействия, называемого Спусковой крючок. Эти триггеры запускаются действием или событием. У услуг есть еще одна характеристика, т.е. Тип запуска. Услуги зависят от обеих этих функций.
В этом посте мы поговорим о том, что такое автоматический (запуск по триггеру) и ручной (запуск по триггеру) и что они означают для служб Windows.
Автоматический (запуск по триггеру) и ручной (запуск по триггеру)
Откройте оснастку «Службы Windows» или панель «Диспетчер служб». Наряду с названием службы он также будет отображать столбцы с подробными сведениями об описании, состоянии, типе запуска и входе в систему как. В этом посте нас интересует Тип запуска. В основном типы запуска:
Что означает автоматический тип запуска?
Многие службы настроены на запуск с Windows, то есть при загрузке компьютера. Им не нужно разрешение пользователя, но они проходят через Локальная система Пользователь, авторизованный Windows для выполнения множества административных должностей.
В оснастке «Службы» дважды щелкните, чтобы открыть любые службы, и перейдите на вкладку «Общие». Тип запуска для службы, которая настроена на запуск с загрузкой, будет установлен на автоматический.
Что означает тип запуска вручную?
Эти типы служб не запускаются при загрузке компьютера. Они запускаются из-за какой-то другой зависимой службы или события. Он также может быть инициирован пользователем компьютера через диспетчер служб.
Что означает триггерный запуск?
Я уверен, что к этому моменту вы уже заметили, что некоторые из сервисов имеют дополнительные условия наряду с типом запуска — Запуск триггера. Это может быть как для Руководство или же Автоматический Тип запуска. Проще говоря, Trigger Start означает, что служба может быть запущена или остановлена событиями операционной системы.
Эти триггеры играют важную роль, потому что без них Служба должна продолжать работать в фоновом режиме, потребляя ресурсы, энергию и батарею. Windows предлагает то, что называется Триггерные события службы. Разработчики могут развернуть Службу и зарегистрироваться для запуска или остановки при возникновении триггерного события.
Классический пример — то, что вы испытываете каждый день. Каждый раз, когда вы загружаете файл, антивирус автоматически проверяет его. Другой пример: когда устройство впервые подключается к компьютеру, Windows начинает поиск и загрузку драйверов.
Тем не менее, не все службы имеют триггерный запуск. Только когда у службы есть хотя бы один триггер, в скобках будет отображаться Запуск триггера напротив соответствующей службы. Преимущество триггеров в том, что они не только устраняют необходимость постоянно поддерживать их работу, но также избавляются от опроса, активного ожидания четности и т. Д.
Как удалить триггеры из службы?
Windows SDK предлагает утилиту командной строки, Sc.exe, который можно использовать для управления Сервисом. Теперь, например, если вы хотите удалить триггер из службы Xbox в Windows, выполните следующие действия.
Запросить услугу
Удалить триггер
Данные для таких триггеров хранятся в реестре или в групповой политике (компьютер или пользователь).
Надеюсь, этот пост немного прояснил ситуацию.
Связанное чтение: Службы Windows: все, что вы хотели о них знать.
Программирование служб Windows 7 с триггерами (ч.1)
Мы предпочитаем считать службы запущенными задачами, работающими в фоновом режиме и не затрагивающими операции пользователя. Службы в Windows отвечают за все виды фоновой активности, начиная со службы Remote Procedure Call (RPC), Printer Spooler и вплоть до службы Network Location Awareness.
Во-вторых, эти растрачиваемые ресурсы непосредственным образом сказываются на потреблении электроэнергии. Чем больше нагрузки мы даем на ЦП, тем больше электроэнергии компьютер потребляет. Это может быть критически важно для ноутбуков и может сократить время работы батареи на несколько часов.
В-третьих, постоянная работа непродуктивного программного обеспечения может привести к утечкам памяти и общей нестабильности системы. Это может привести к сбою в работе приложения и, в конце концов, компьютера.
Учитывая все вышесказанное, вы можете удивиться, почему так много разработчиков настраивают свои службы на постоянную работу, если у них имеется другая возможность. Даже до Windows 7 было доступно несколько вариантов запуска служб:
К сожалению, многие ISV (включая саму Microsoft) продолжают настраивать свои службы на автоматический (Automated) или автоматический отложенный запуск (Automatic Delayed), поскольку для всех это представляется простейшим решением. Служба просто работает 24х7 и всегда доступна, устраняя любую необходимость проверки зависимостей или того, запущена ли служба.
Можно привести множество примеров существующих служб, которые могут расходовать куда меньше ресурсов и стать безопаснее, не работая 24х7. Например, подумайте о службе обновлений, которая проверяет наличие новых обновлений для приложения. Если компьютер не подключен к сети и не имеет IP-адреса, зачем работать этой службе? Она ничего не может сделать, так зачем оставлять работающей программу, которая ничего не делает? Подумайте о службе управления политиками, которая используется при изменении групповых политик или при подключении компьютера к домену или отключении от него, но сейчас, когда компьютер подключен к моей домашней сети, служба, опять же, работает впустую.
Появление служб с запуском по триггеру
Решение вышеуказанных проблем заключается в выведении службы из «состояния постоянной работы» в другие виды фоновой активности, такие как запланированные задачи или службы, запускаемые триггером. Эта статья посвящена Windows 7 Trigger Start Services. О Windows 7 Scheduled Tasks можно сказать очень много полезного, что и будет сделано в последующих статьях.
Службы, запускаемые по триггеру (англ. trigger-start service), впервые появились в Windows 7. По сути, это обычная служба, которую вы можете настроить на запуск (или остановку) в случае срабатывания триггера, то есть в определенном случае или состоянии, которые вы сами задаете (например, когда становится доступным IP-адрес или когда он исчезает). Ниже приведен список доступных триггеров, с помощью которых вы можете настроить режим запуска вашей службы:
Последний пункт указывает на расширяемость. Будучи разработчиком, вы можете настроить любое событие ETW в качестве триггера для службы, что дает вам очень хороший инструмент для управления запуском и остановкой служб вашего приложения.
Так что же такое триггер?
Триггер состоит из:
Работа с Trigger Start Services
К сожалению, в пользовательском интерфейсе консоли Windows 7 Services MMC нет графического представления Trigger Start Services. Однако у вас есть две возможности. Вы можете по-прежнему использовать старый добрый sc.exe (программа командной строки Service Configuration) или воспользоваться методом WIN32 ChangeServiceConfig2 для программной настройки опций запуска службы, как будет показано в этой статье.
Использование SC.exe для запроса данных триггера службы (Query Service Trigger Information)
Пора повеселиться. Начнем с получения сведений о конфигурации некоторых служб. Общая форма для использования конфигурации службы выглядит следующим образом:
[ist]1. Откройте меню «Пуск».
2. Введите CMD в поле поиска.
3. Выберите cmd.exe.
4. Введите sc qtriggerinfo w32time и нажмите клавишу ввода.
Вот, как это должно выглядеть:
Как вы можете видеть, мы запросили данные триггера службы W32time, которая настроена на запуск при подключении компьютера к домену и остановку при отключении от домена.
Microsoft в Windows 7 обновила приложение командной строки sc.exe для поддержки конфигурации и получения сведений о поддерживаемых триггерах. Введите sc triggerinfo в окне Windows Shell и нажмите клавишу ввода. Результат будет похож на тот, что приведен ниже, и будет содержать все триггеры и сведения о том, как настроить службы на их использование.
ПАРАМЕТРЫ:
start/device/UUID/HwId1/.
start/custom/UUID/data0/..
stop/custom/UUID/data0/.
start/strcustom/UUID/data0/..
stop/strcustom/UUID/data0/..
start/networkon
stop/networkoff
start/domainjoin
stop/domainleave
start/portopen/параметр
stop/portclose/параметр
start/machinepolicy
start/userpolicy
delete
Программная настройка Trigger Start Services при помощи ChanceServiceConfig2
Более интересным с точки зрения разработчиков аспектом является создание служб, зависящих от триггера, и использование кода для конфигурации службы. В Windows 7 вы можете использовать функцию ChangeServiceConfig2 для настройки данных триггера службы и функцию QueryServiceConfig2 для их вызова.
BOOL _SetServiceToStartOnDeviceTrigger()
<
BOOL fResult = FALSE;
SC_HANDLE hScm = OpenSCManager(
NULL, //local machine
NULL, //active database
SC_MANAGER_CONNECT);
LPCWSTR lpszDeviceString = L»USBSTOR\\GenDisk»;
SERVICE_TRIGGER_SPECIFIC_DATA_ITEM deviceData = <0>;
deviceData.dwDataType = SERVICE_TRIGGER_DATA_TYPE_STRING;
deviceData.cbData =
(wcslen(lpszDeviceString)+1) * sizeof(WCHAR);
deviceData.pData = (PBYTE)lpszDeviceString;
SERVICE_TRIGGER st;
st.dwTriggerType =
SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL;
st.dwAction = SERVICE_TRIGGER_ACTION_SERVICE_START;
st.pTriggerSubtype = (GUID *) &GUID_USBDevice;
st.cDataItems = 1;
st.pDataItems = &deviceData;
SERVICE_TRIGGER_INFO sti;
sti.cTriggers = 1;
sti.pTriggers = &st;
sti.pReserved = 0;
fResult = ChangeServiceConfig2(
hService,
SERVICE_CONFIG_TRIGGER_INFO,
&sti);
>
CloseServiceHandle (hService);
>
CloseServiceHandle (hScm);
if(!fResult)
<
printf(«Service trigger registration failed (%d)\n»,
GetLastError());
>
return fResult;
>
SERVICE_TRIGGER_SPECIFIC_DATA_ITEM задает тип события триггера. Он содержит данные о событии триггера службы. В нашем случае, мы задаем строку, описывающую подключение USB-диска.
Затем мы задаем структуру SERVICE_TRIGGER, которая представляет события триггеру службы. Заметьте, что именно здесь мы задаем тип триггера (подключение устройства), действие (запуск службы), и подтип триггера (определенный род USB-дисков). Следом мы определяем конкретное устройство, которое будет вызывать службу. Заметьте, что вы можете задать список устройств и их GUID. Также следует отметить, что мы не хотим срабатывания триггера запуска службы при подключении любого USB-устройства, как то мышь или камера. Мы хотим, чтобы служба запускалась только при появлении USB-диска.
Наконец, мы задаем структуру SERVICE_TRIGGER_INFO, которая содержит данные события триггера службы. Эта структура просто указывает на структуру SERVICE_TRIGGER, которую мы задали ранее, и количество триггеров, число которых в данном случае равно одному.
Теперь мы можем вызвать функцию ChanceServiceConfig2 и пройти дескриптор к службе, которую мы хотим настроить, параметр SERVICE_CONFIG_TRIGGER_INFO, который указывает, что мы хотим настроить триггер службы, и Null.
Вот и все. Если вы все сделали правильно, то служба запуститься при подключении USB жесткого диска.
Вы можете узнать больше о Windows 7 при помощи Windows 7 Training Kit for Developers или просмотрев видео, посвященные Windows 7, на Channel 9.
Вы также можете потренироваться в работе с Windows 7 Trigger Start Services при помощи тренинга Windows 7 Online, являющегося частью Channel 9 Learning Center.
Ссылки по теме
Помощь |
Задать вопрос | |
программы | |
обучение | |
экзамены | |
компьютеры | |
ICQ-консультанты | |
Skype-консультанты | |
Общая справка | |
Как оформить заказ | |
Тарифы доставки | |
Способы оплаты | |
Прайс-лист | |
Карта сайта | |
О нас |