Проекты

SAL Host Windows Service

Хост хорошо подходит для модулей, которые не требуют взаимодействия с пользователем, но должны быть постоянно запущенны. К таким приложениям можно отнести приложения мониторинга системы или ServiceBus.

Для установки сервис использует Win32 API функции из библиотеки advapi32.dll. Поэтому управление сервисом возможно через обычную коммандную строку. Поддержку PowerShell не добавлял, т.к. собрано на .NET 3.5.

По умолчанию, все трассировочные логи пишутся в папку: C:\log\Flatbed.WinService.log поэтому при желании увидеть логи, необходимо создать эту папку на файловой системе, а при желании поменять поведение трассировщика, необходимо отредактировать секцию <system.diagnostics> в файле Flatbed.WinService.exe.config

Внимание!

Перед использованием, запускайте сервис с ключом /? для ознакомления со списком возможных комманд. По умолчанию, при запуске без основных комманд (список ниже), сервис запустится в режиме ожидания комманды на запуск сервис, так что при необходимости проверить работоспособность плагина(ов) с присоединённым дебаггером, лучше использовать ключ /Debug.

Основные комманды

Основные ключи взаимодействия с сервисом:

  • /Install (/I) — Установка сервиса (дополнительные комманды установки см. ниже)
  • /Uninstall (/U) — Удаление сервиса (дополнительные комманду удаления см. ниже)
  • /Help (/?) — Получить помошь по коммандам сервиса. (Помощь атогенерится из атрибутов, так что некоторое форматирование может быть не очень красивым)
  • /Debug — Запустить сервис на выполнение из коммандной строки. Удобно для отладки массива плагинов.

Дополнительные комманды

Данные комманды используются для кастомизации сервиса во время установки или удаления

  • /ServiceName:{SALFlatbedSvc} (/N:{SALFlatbedSvc}) — Указание системного наименования сервиса (Используется во время установки или удалении)
  • /DisplayName:{SAL Flatbed Service} (/D:{SAL Flatbed Service}) — Указание пользовательского наименования сервиса
  • /Arguments:{null} (/A:{null}) — Аргументы, которые будут доступны при запуске сервиса через System.Environment.GetCommandLineArgs().
  • /Acess:{AllAccess} (/R:{AllAccess}) — Уровень доступа для сервиса. Возможные значения (Строковое представление):
    • QueryConfig (0x0001) — Required to call the QueryServiceConfig and QueryServiceConfig2 functions to query the service configuration.
    • ChangeConfig (0x0002) — Required to call the ChangeServiceConfig or ChangeServiceConfig2 function to change the service configuration. Because this grants the caller the right to change the executable file that the system runs, it should be granted only to administrators
    • QueryStatus (0x0004) — Required to call the QueryServiceStatus or QueryServiceStatusEx function to ask the service control manager about the status of the service. Required to call the NotifyServiceStatusChange function to receive notification when a service changes status
    • EnumerateDependencies (0x0008) — Required to call the EnumDependentServices function to enumerate all the services dependent on the service
    • Start (0x0010) — Required to call the StartService function to start the service
    • Stop (0x0020) — Required to call the ControlService function to stop the service
    • PauseContinue (0x0040) — Required to call the ControlService function to pause or continue the service
    • Interrogate (0x0080) — Required to call the ControlService function to ask the service to report its status immediately
    • UserDefinedControl (0x0100) — Required to call the ControlService function to specify a user-defined control code
    • StandartRightsRequired (0xF0000)
    • AllAccess — Всё вышеперечисленное
  • /Type:{Win32OwnProcess} (/T:{Win32OwnProcess}) — Тип сервиса. Возможные значения (Строковое представление):
    • KernelDriver (0x00000001) — Driver service
    • FileSystemDriver (0x00000002) — File system driver service
    • Adapter (0x00000004) — Reserved
    • RecognizerDriver (0x00000008) — Reserved
    • Win32OwnProcess (0x00000010) — Service that runs in its own process
    • Win32ShareProcess (0x00000020) — Service that shares a process with one or more other services
    • InteractiveProcess (0x00000100) — The service can interact with the desktop
  • /Start:{BootStart} (/S:{BootStart}) — Правило запуска сервиса. Возможные значения (Строковое представление):
    • BootStart (0x00000000) — A device driver started by the system loader. This value is valid only for driver services
    • SystemStart (0x00000001) — A device driver started by the IoInitSystem function. This value is valid only for driver services
    • AutoStart (0x00000002) — A service started automatically by the service control manager during system startup. For more information, see Automatically Starting Services
    • DemandStart (0x00000003) — A service started by the service control manager when a process calls the StartService function. For more information, see Starting Services on Demand
    • Disabled (0x00000004) — A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED
  • /Error:{Normal} (/E:{Normal}) — Поведение сервиса при возникновении ошибки во время запуска сервиса. Возможные значения (Строковое представление):
    • Ignore (0x00000000) — The startup program ignores the error and continues the startup operation
    • Normal (0x00000001) — The startup program logs the error in the event log but continues the startup operation
    • Severe (0x00000002) — The startup program logs the error in the event log. If the last-known-good configuration is being started, the startup operation continues. Otherwise, the system is restarted with the last-known-good configuration.
    • Critical (0x00000003) — The startup program logs the error in the event log, if possible. If the last-known-good configuration is being started, the startup operation fails. Otherwise, the system is restarted with the last-known good configuration.
  • /Dependencies:{null} — Список системных наименований сервисов перечисленных через запятую, которые должны быть запущены перед запуском данного сервиса
  • /Login:{NT AUTHORITY\NetworkService} (/L:{NT AUTHORITY\NetworkService}) — Логин под которым будет запущен сервис
  • /Password:{null} (/P:{null}) — Пароль под которым будет запущен сервис. Для аккаунта NetworkService текущей машины, пароль указывать не надо

Итого, из всех параметров пропущены только lpdwTagId и lpLoadOrderGroup (См. CreateService). Увы, я ни разу не находил им применения, поэтому и не добавил и негде тестить. Но могу добавить при необходимости.

Теги:

Скачать

Ссылки

Родительские файлы

Дочерние файлы