1 чем отличается служба от обычных программ. Службы Windows NT, общие понятия

25.03.2024

Режимы работы

В большинстве случаев службам запрещено взаимодействие с консолью или рабочим столом пользователей (как локальных, так и удалённых), однако для некоторых служб возможно исключение - взаимодействие с консолью (сессией с номером 0, в которой зарегистрирован пользователь локально или при запуске службы mstsc с ключом /console).

Существует несколько режимов для служб:

  • запрещён к запуску;
  • ручной запуск (по запросу);
  • автоматический запуск при загрузке компьютера;
  • автоматический (отложенный) запуск (введён в Windows Vista и Windows Server 2008);
  • обязательная служба/драйвер (автоматический запуск и невозможность (для пользователя) остановить службу).

Фоновый режим

Запуск, остановка и изменение служб Windows

Службы и их атрибуты могут быть изменены в консоли управления MMC:

В различных версиях операционных систем могут присутствовать одни службы и отсутствовать другие. Некоторые приложения и программы, устанавливаемые отдельно, также могут создавать свои службы.

Список служб операционных систем Microsoft Windows

Выводимое имя Имя службы Функции Описание
DHCP-клиент Dhcp Регистрирует и обновляет IP-адреса и DNS-записи для этого компьютера. Если эта служба остановлена, этот компьютер не сможет получать динамические IP-адреса и выполнять обновления DNS.
DNS-клиент Dnscache Служба DNS-клиента (dnscache) кэширует имена DNS (Domain Name System) и регистрирует полное имя данного компьютера. Если служба остановлена, разрешение имен DNS будет продолжаться. Однако результаты очередей имен DNS не будут кэшироваться, и имя компьютера не будет зарегистрировано.
KtmRm для координатора распределённых транзакций KtmRm Координирует транзакции между MSDTC и диспетчером транзакций ядра (Kernel Transaction Manager - KTM).
ReadyBoost EMDMgmt ReadyBoost Поддержка повышения производительности системы с помощью технологии ReadyBoost .
Superfetch SysMain Superfetch Поддерживает и улучшает производительность системы.
Windows Audio Audiosrv Управление средствами работы со звуком для программ Windows. Если эта служба остановлена, то аудиоустройства и эффекты не будут правильно работать.
Windows CardSpace idsvc Обеспечивает надежную возможность создания, управления и раскрытия цифровых удостоверений.
Автоматическое обновление WUAUSERV Включает загрузку и установку обновлений Windows. Если служба отключена, то на этом компьютере нельзя будет использовать возможности автоматического обновления или веб-узел Windows Update.

Список служб, создаваемых приложениями и программами Microsoft

Список служб, создаваемых приложениями и программами других производителей

См. также

Список служб Windows

Ссылки

  • pcs.suite101.com/article.cfm/index_of_services: Index of Windows XP Services - An Index of the Services running on Windows XP operating system
  • Как удалить службу в Windows Vista или Windows XP
  • Службы Windows XP (рус.)

Wikimedia Foundation . 2010 .

Смотреть что такое "Службы Windows" в других словарях:

    Windows SharePoint Services (WSS) бесплатное дополнение к Microsoft Windows Server 2003 и 2008, реализующее полнофункциональную веб платформу с поддержкой следующих возможностей: Система управления контентом Средства для совместной работы… … Википедия

    Разработчик Microsoft Семейство ОС Windows … Википедия

    Компонент Microsoft Windows … Википедия

Или рабочим столом пользователей (как локальных, так и удалённых), однако для некоторых служб возможно исключение - взаимодействие с консолью (сессией с номером 0, в которой зарегистрирован пользователь локально или при запуске службы mstsc с ключом /console).

Существует несколько режимов для служб:

  • запрещён к запуску;
  • ручной запуск (по запросу);
  • автоматический запуск при загрузке компьютера;
  • автоматический (отложенный) запуск (введён в Windows Vista и Windows Server 2008);
  • обязательная служба/драйвер (автоматический запуск и невозможность (для пользователя) остановить службу).

Фоновый режим

Запуск, остановка и изменение служб Windows

Службы и их атрибуты могут быть изменены в консоли управления MMC:

В различных версиях операционных систем могут присутствовать одни службы и отсутствовать другие. Некоторые приложения и программы, устанавливаемые отдельно, также могут создавать свои службы.

Список служб операционных систем Microsoft Windows

Выводимое имя Имя службы Функции Описание
DHCP-клиент Dhcp Регистрирует и обновляет IP-адреса и DNS-записи для этого компьютера. Если эта служба остановлена, этот компьютер не сможет получать динамические IP-адреса и выполнять обновления DNS.
DNS-клиент Dnscache Служба DNS-клиента (dnscache) кэширует имена DNS (Domain Name System) и регистрирует полное имя данного компьютера. Если служба остановлена, разрешение имен DNS будет продолжаться. Однако результаты очередей имен DNS не будут кэшироваться, и имя компьютера не будет зарегистрировано.
KtmRm для координатора распределённых транзакций KtmRm Координирует транзакции между MSDTC и диспетчером транзакций ядра (Kernel Transaction Manager - KTM).
ReadyBoost EMDMgmt ReadyBoost Поддержка повышения производительности системы с помощью технологии ReadyBoost .
Superfetch SysMain Superfetch Поддерживает и улучшает производительность системы.
Windows Audio Audiosrv Управление средствами работы со звуком для программ Windows. Если эта служба остановлена, то аудиоустройства и эффекты не будут правильно работать.
Windows CardSpace idsvc Обеспечивает надежную возможность создания, управления и раскрытия цифровых удостоверений.
Автоматическое обновление WUAUSERV Включает загрузку и установку обновлений Windows. Если служба отключена, то на этом компьютере нельзя будет использовать возможности автоматического обновления или веб-узел Windows Update.
Удалённый вызов процедур(RPC) RpcSs Обеспечивает сопоставление конечных точек и иных служб RPC.

Список служб, создаваемых приложениями и программами Microsoft

Примеры служб, создаваемых приложениями и программами других производителей

Выводимое имя Имя службы Функции Описание
ESET HTTP Server EhttpSrv антивирусная защита ESET HTTP Server, компонент

Как запустить приложение в виде службы Windows

Можно ли запустить клиентское приложение в качестве службы? В одной из я описывал способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager .

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc , на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.

Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

Создание службы

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad , которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Удаление службы

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm , можно обойтись и без подтверждения.

Запуск службы в интерактивном режиме

Основное отличие пользовательского приложения от службы заключается в том, что после запуска приложение может требовать для продолжения работы дополнительных действий со стороны пользователя — например нажать кнопку или ввести команду. Для этого необходимо получить к нему доступ, что как оказывается, не так-то просто сделать.

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».

А дальше начинаются чудеса 🙂 Cлужба, запущенная в интерактивном режиме, открывается в изолированном сеансе (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0 .

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

Start-Service -Name ui0detect

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»

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

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию 🙂

Последнее обновление: 31.10.2015

Одним из важнейших компонентов ОС Windows являются службы. Фактически это отдельные приложения, которые не имеют графического интерфейса и которые выполняют различные задачи в фоновом режиме. Службы могут быть запущены при старте операционной системы, так и в любой другой момент работы пользователя. Распространенным примером служб являются различные веб-серверы, которые в фоновом режиме прослушивают определенный порт на наличие подключений, и если подключения имеются, то взаимодействуют с ними. Это могут быть также различные вспомогательные сервисы обновлений для других установленных программ, которые обращаются к серверу, чтобы узнать, есть ли новая версия приложения. В общем то мы можем открыть панель служб и сами увидеть все установленные и запущенные службы:

Рассмотрим, как создавать свои службы в C#. В качестве реализуемой задачи выберем наблюдение за изменениями в определенной папке в файловой системе. Теперь создадим для ее выполнения службу.

Вначале создадим новый проект, который будет иметь тип Windows Service . Назовем проект FileWatcherService:

После этого Visual Studio генерирует проект, который имеет все необходимое. Хотя в принципе нам необязательно выбирать именно этот тип проекта, можно было бы создать проект библиотеки классов, и затем в нем определить все необходимые классы.

Итак, новый проект выглядит следующим образом:

Здесь также есть файл Program.cs и есть собственно узел службы Service1.cs .

Служба представляет обычное приложение, но она не запускаетс сама по себе. Все вызовы и обращения к ней проходят через менеджер управления службами (Service Control Manager или SCM). Когда служба запускается автоматически при старте системы или вручную, то SCM обращается к методу Main в классе Program:

Static class Program { static void Main() { ServiceBase ServicesToRun; ServicesToRun = new ServiceBase { new Service1() }; ServiceBase.Run(ServicesToRun); } }

Метод Main по умолчанию определен таким образом, чтобы запускать сразу несколько служб, которые определены в массиве ServicesToRun. Однако по умолчанию проект содержит только одну службу Service1. Сам запуск производится с помощью метода Run: ServiceBase.Run(ServicesToRun) .

Сама запускаемая служба представлена узлом Service1.cs. Однако на самом деле это не простой файл кода. Если мы откроем этот узел, то увидим в нем файл дизайнера службы Service1.Designer.cs и класс Service1.

Класс Service1 собственно представляет службу. По умолчанию он имеет следующий код:

Using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; namespace FileWatcherService { public partial class Service1: ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string args) { } protected override void OnStop() { } } }

Класс службы должен наследоваться от базового класса ServiceBase . Этот класс определяет ряд методов, важнейшие из которых метод OnStart() , который запускает действия, выпоняемые службой, и метод OnStop() , останавливающий службу.

После того, как SCM вызовет метод Main и зарегистрирует службу, происходит непосредственный ее вызов через запуск метода OnStart.

Когда в консоли служб или через командную строку мы посылаем команду на остановку службы, то SCM обращается к методу OnStop для ее остановки.

Кроме этих двух методов в классе службы можно переопределить еще несколько методов базового класса ServiceBase:

    OnPause : вызывается при приостановке службы

    OnContinue : вызывается при возобновлении работы службы после ее приостановки

    OnShutdown : вызывается при завершении работы Windows

    OnPowerEvent : вызывается при изменении режима электропитания

    OnCustomCommand : вызывается при получении службой пользовательской команды от Менеджера Управления Службами (Service Control Manager / SCM)

В конструкторе класса Service1 вызывается метод InitializeComponent() , который определен в файле дизайнера Service1.Designer.cs:

Namespace FileWatcherService { partial class Service1 { private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { components = new System.ComponentModel.Container(); this.ServiceName = "Service1"; } } }

Единственное, что надо в нем отметить, это установка названия службы (свойство ServiceName):

This.ServiceName = "Service1";

Это то название, которое будет отображаться в консоли служб после установки данной службы. Мы можем его изменить, а можем и оставить как есть.

Теперь изменим код службы следующим образом:

Using System; using System.ServiceProcess; using System.IO; using System.Threading; namespace FileWatcherService { public partial class Service1: ServiceBase { Logger logger; public Service1() { InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; } protected override void OnStart(string args) { logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); } protected override void OnStop() { logger.Stop(); Thread.Sleep(1000); } } class Logger { FileSystemWatcher watcher; object obj = new object(); bool enabled = true; public Logger() { watcher = new FileSystemWatcher("D:\\Temp"); watcher.Deleted += Watcher_Deleted; watcher.Created += Watcher_Created; watcher.Changed += Watcher_Changed; watcher.Renamed += Watcher_Renamed; } public void Start() { watcher.EnableRaisingEvents = true; while(enabled) { Thread.Sleep(1000); } } public void Stop() { watcher.EnableRaisingEvents = false; enabled = false; } // переименование файлов private void Watcher_Renamed(object sender, RenamedEventArgs e) { string fileEvent = "переименован в " + e.FullPath; string filePath = e.OldFullPath; RecordEntry(fileEvent, filePath); } // изменение файлов private void Watcher_Changed(object sender, FileSystemEventArgs e) { string fileEvent = "изменен"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } // создание файлов private void Watcher_Created(object sender, FileSystemEventArgs e) { string fileEvent = "создан"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } // удаление файлов private void Watcher_Deleted(object sender, FileSystemEventArgs e) { string fileEvent = "удален"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } private void RecordEntry(string fileEvent, string filePath) { lock (obj) { using (StreamWriter writer = new StreamWriter("D:\\templog.txt", true)) { writer.WriteLine(String.Format("{0} файл {1} был {2}", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), filePath, fileEvent)); writer.Flush(); } } } } }

Ключевым классом, который инкапсулирует всю функциональность, является класс Logger. С помощью объекта FileSystemWatcher он будет вести мониторинг изменений в папке D://Temp . В методе Start() устанавливается, что мы будем отслеживать изменения через объект FileSystemWatcher. И вся работа будет идти, пока булевая переменная enabled равна true . А метод Stop() позволит завершить работу класса.

События FileSystemWatcher позволяют отслеживать все изменения в наблюдаемой папке. При этом будет вестись запись изменений в файл templog.txt. Чтобы не было гонки ресурсов за файл templog.txt, в который вносятся записи об изменениях, процедура записи блокируется заглушкой lock(obj) .

В итоге после создания, изменения, переименования и удаления файл лога будет содержать что-то наподобие:

30.07.2015 12:15:40 файл D:\Temp\Новый текстовый документ.txt был создан 30.07.2015 12:15:46 файл D:\Temp\Новый текстовый документ.txt был переименован в D:\Temp\hello.txt 30.07.2015 12:15:55 файл D:\Temp\hello.txt был изменен 30.07.2015 12:15:55 файл D:\Temp\hello.txt был изменен 30.07.2015 12:16:01 файл D:\Temp\hello.txt был удален

В самом классе службы Service1 в конструкторе устанавливается ряд опций:

This.CanStop = true; // службу можно остановить this.CanPauseAndContinue = true; // службу можно приостановить и затем продолжить this.AutoLog = true; // служба может вести запись в лог

В методе OnStart() для запуска объекта Logger вызывется новый поток:

Protected override void OnStart(string args) { logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); }

Новый поток нужен, так как текущий поток обрабатывает только команды SCM и должен возвращаться из метода OnStart как можно быстрее.

Когда от менеджера SCM поступает команда на остановку службы, срабатывает метод OnStop, который вызывает метод logger.Stop() . Дополнительная задержка позволит потоку логгера остановиться:

Protected override void OnStop() { logger.Stop(); Thread.Sleep(1000); }

Однако самого класса службы еще недостаточно. Нам необходимо еще создать устанощик службы.

Можно ли запустить клиентское приложение в качестве службы? Не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager .

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft , начиная с Windows 2000 и заканчивая . NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.

Для демонстрации возможностей NSSM попробуем запустить Блокнот в качестве службы на .

Создание службы

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad, которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку "Install service". Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке "Shutdown" перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке "Exit actions" можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

На вкладке "Input/Output (I/O)" можно задать перенаправление ввода\вывода приложения в указанный файл.

На вкладке "Environment" можно задать для службы новые переменные окружения, или переопределить существующие.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Удаление службы

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm, можно обойтись и без подтверждения.

Запуск службы в интерактивном режиме

Основное отличие пользовательского приложения от службы заключается в том, что после запуска приложение может требовать для продолжения работы дополнительных действий со стороны пользователя - например нажать кнопку или ввести команду. Для этого необходимо получить к нему доступ, что как оказывается, не так-то просто сделать.

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке "Вход в систему" отметить чекбокс "Разрешить взаимодействие с рабочим столом".

А дальше начинаются чудеса Для службы, запущенной в интерактивном режиме, система открывает отдельный изолированный сеанс (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0 .

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

Start-Service -Name ui0detect

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт "Посмотреть сообщение"

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

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию