Сайт о телевидении

Сайт о телевидении

» » Установить приложение как службу. Из exe в службу

Установить приложение как службу. Из exe в службу


Иногда ошибки services.exe и другие системные ошибки EXE могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл services.exe, но когда эти программы удалены или изменены, иногда остаются "осиротевшие" (ошибочные) записи реестра EXE.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка services.exe. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с Windows XP. Таким образом, эти поврежденные записи реестра EXE необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей services.exe не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как %%product%% (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с services.exe. Используя очистку реестра , вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку services.exe) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.


Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с services.exe (например, Windows XP):

  1. Нажмите на кнопку Начать .
  2. Введите "command " в строке поиска... ПОКА НЕ НАЖИМАЙТЕ ENTER !
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER .
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да .
  6. Черный ящик открывается мигающим курсором.
  7. Введите "regedit " и нажмите ENTER .
  8. В Редакторе реестра выберите ключ, связанный с services.exe (например, Windows XP), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт .
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа Windows XP.
  11. В поле Имя файла введите название файла резервной копии, например "Windows XP резервная копия".
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь .
  13. Нажмите Сохранить .
  14. Файл будет сохранен с расширением.reg .
  15. Теперь у вас есть резервная копия записи реестра, связанной с services.exe.

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

Полезная информация
Недавно наша компания начала плавный переход части своих задач в облако. В частности мы активно начали использовать концепцию saas от Salesforce.com, в чем нам очень сильно помогли консультанты компания CT Consulting. Проект был признан успешным и активно продолжается.

Если говорить о приложениях очень общими словами они бывают либо непосредственно работающие с пользователем в графическим интерфейсом, либо работают в фоне в виде служб. Иногда возникает необходимость запустить определенное приложение в виде службы, однако в приложении такой возможности не предусмотрено. Как сделать это мы и рассмотрим в данной статье. В качестве примера возьмем программу uTorrent.

Дополнительно требуемое ПО

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

Для этого есть различные методы, однако одним из моих любимых является использование instsrv.exe и srvany.exe . Данные утилиты являются частью Windows 2003 resource kit, который можно скачать с сайта MS.

  • Скачиваем и устанавливаем Resource Kit в директорию по умолчанию. c:\Program Files (x86)\Windows Resource Kits\Tools\

Подготавливаем аккаунт для службы

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

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

  • Создайте и залогиньтесь в систему под служебным аккаунтом.
  • Запустите приложение и сделайте необходимые изменения – для uTorrent я включаю веб-интерфейс и устанавливаю корректные настройки портов подключения.

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

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

  • Откройте командную строку с правами администратора
  • Введите следующую команду:

C:\>"c:\Program Files (x86)\Windows Resource Kits\Tools\instsrv.exe" uTorrent " c:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe"

  • Вы должны получить сообщение "The service was successfully added!"

В данный момент вы уже создали службу, но ещё не указали что служба должна выполнять.

  • Откройте редактор реестра
  • Перейдите в HKLM\System\CurrentControlSet\Services\
  • Найдите службу, которую вы создали(uTorrent)
  • Создайте новую ветку с именем Parameters
  • В ветке Parameters создайте ключ Application
  • Укажите путь к исполняемому файлу без кавычек

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

  • Откройте консоль управления службами
  • Найдите службу uTorrent
  • На вкладке General укажите режим запуска автоматический
  • На вкладке Log On tab укажите ранее созданный служебный аккаунт

Если это локальный аккаунт используйте синтаксис.\account если доменный, то domain\account

Тестирование

Для проверки что все работает перезагрузим компьютер. Залогинимся под другим пользователем и проверим следующее:

  • Служба запущена
  • Процесс работает под служебным аккаунтом
  • Приложение работает так, как нами задумано

Интересное

Не всем по карману настоящие швейцарские часы, но козырнуть все таки хочется. Поэтому я решил, что куплю копию швейцарских часов и никому не скажу . Нашел отличный магазин с огромным выбором очень качественных копий. При чем нужно учитывать - что это не подделки, это на самом деле отличные часы, которые тоже стоят очень неплохо, поэтому если бюджет ограничен – это на самом деле отличный выбор.

    Практически, каждый пользователь Windows, неоднократно наблюдал в списке отображаемых диспетчером задач, несколько процессов с именем svchost.exe . Для разных версий Windows и разного количества используемых компонентов, количество таких процессов может составлять от нескольких штук до нескольких десятков. При чем, это вполне нормальное явление, поскольку svchost.exe – это главный процесс (Host process) для системных служб (сервисов), загружаемых из динамических библиотек (.dll ). Для запуска таких служб используется один и тот же исполняемый файл svchost.exe из каталога \Windows\system32\ , но ему передаются разные параметры командной строки, для каждой конкретной службы – свои. Например, для запуска службы Удаленный вызов процедур (RPC) используется командная строка:

C:\Windows\system32\svchost.exe -k RPCSS

Использование единого процесса для работы нескольких сервисов позволяет существенно уменьшить затраты оперативной памяти и ресурсов процессора. Все копии svchost.exe запускаются системным процессом services.exe (родительским процессом) в ходе загрузки и инициализации системы. Вызовы svchost.exe для системных служб указаны в ключе реестра

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\имя службы

Параметр ImagePath задает командную строку для данной службы или группы служб. Имя библиотеки, которая используется для данной службы, определяется параметром ServiceDll подраздела Parameters

Перечень всех служб, запускаемых с использованием svchost.exe и их объединение в группы определяется содержимым ключа реестра

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Svchost

Так, например, в группу DcomLaunch входят 3 службы:

Power - Питание

PlugPlay - Plug-and-Play

DcomLaunch - Модуль запуска процессов DCOM-сервера

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

    Некоторые компьютерные вирусы и трояны маскируются под имя svchost.exe , помещая исполняемый файл в отличный от \Windows\system32\ каталог, например, вирусы Net-Worm.Win32.Welchia.a, Virus.Win32.Hidrag.d, Trojan-Clicker.Win32.Delf.cn. Верным признаком наличия такого вируса является запущенный от имени пользователя процесс с именем svchost.exe . Настоящий процесс svchost.exe всегда выполняется в контексте учетных записей SYSTEM, LOCAL SERVICE или NETWORK SERVICE. Кроме того, svchost.exe запускается только как системная служба, и никогда не запускается из раздела Run реестра или из папки . Однако, существует возможность создание вредоносной программой службы, использующей для запуска настоящий svchost.exe , но выполняющей вредные действия с использованием собственной библиотеки .dll , например, так это делает вирус Conficker (Kido). Подобный прием встречается значительно реже, чем во времена Windows XP/2000, в связи с тем, что в современных версиях Windows реализовать данный способ заражения системы становится все сложнее и сложнее. Как правило, признаком такого вирусного заражения является использование файла .dll , расположенного не в каталоге \Widows\System32\ , отсутствие цифровой подписи разработчика, а также адекватного описания поддельной службы.

Как определить системную службу, связанную с конкретным процессом svchost.exe.

Иногда, требуется определить, какая именно служба соответствует конкретному процессу scvhost.exe , например, когда этот процесс потребляет значительные ресурсы центрального процессора:

В данном примере, процесс svchost.exe потребляет 50% ресурсов процессора. Это ненормально, и внешне может проявляться в виде снижения производительности, подвисаний (лагов), скачкообразного перемещения указателя мыши и т.п. Для решения данной проблемы, в первую очередь необходимо определить, действительно ли данный процесс является системным, и с какой именно службой он связан. Существует несколько способов, применимость которых зависит от версии Windows.

Использование утилиты командной строки tasklist.exe

Для получения списка выполняющихся служб в любой версии Windows можно использовать команду:

tasklist /svc

tasklist /svc > %TEMP%\svclist.txt - то же, что и в предыдущем примере, но с выдачей результатов в текстовый файл. Результат будет представлен в DOS-кодировке, и для просмотра его кириллической составляющей стандартными средствами Windows, потребуется перекодировка, или редактор с поддержкой кодовой страницы CP866 (DOS), как например, Notepad++ или встроенный редактор Far Manager.

notepad++ %TEMP%\svclist.txt - открыть созданный файл со списком сервисов.

Имя образа PID Службы ========================= ======== ============================================ System Idle Process 0 Н/Д System 4 Н/Д smss.exe 492 Н/Д csrss.exe 668 Н/Д wininit.exe 748 Н/Д csrss.exe 764 Н/Д services.exe 816 Н/Д lsass.exe 832 KeyIso, SamSs lsm.exe 840 Н/Д winlogon.exe 892 Н/Д svchost.exe 984 DcomLaunch, PlugPlay, Power svchost.exe 600 RpcEptMapper, RpcSs cmdagent.exe 744 CmdAgent svchost.exe 1040 CryptSvc, Dnscache, LanmanWorkstation, NlaSvc, TermService atiesrxx.exe 1096 AMD External Events Utility svchost.exe 1132 AudioSrv, Dhcp, eventlog, HomeGroupProvider, lmhosts, wscsvc svchost.exe 1176 AudioEndpointBuilder, CscService, HomeGroupListener, Netman, PcaSvc, TrkWks, UmRdpService, UxSms, Wlansvc, wudfsvc svchost.exe 1236 EventSystem, fdPHost, FontCache, netprofm, nsi, WdiServiceHost svchost.exe 1288 AeLookupSvc, BITS, Browser, CertPropSvc, EapHost, gpsvc, IKEEXT, iphlpsvc, LanmanServer, ProfSvc, Schedule, SENS, SessionEnv, ShellHWDetection, Themes, Winmgmt . . . Отображается имя образа (исполняемого файла), уникальный идентификатор процесса PID и краткое название службы. Так, например, процесс svchost.exe с идентификатором 984 имеет отношение к службам с короткими именами DcomLaunch, PlugPlay, Power . Для получения подробной информации о службе, в том числе и ее выводимое имя можно использовать команду управления службами SC :

sc qc power - отобразить конфигурацию службы Power

Пример отображаемой информации:

Имя_службы: power Тип: 20 WIN32_SHARE_PROCESS Тип_запуска: 2 AUTO_START Управление_ошибками: 1 NORMAL Имя_двоичного_файла: C:\Windows\system32\svchost.exe -k DcomLaunch Группа_запуска: Plugplay Тег: 0 Выводимое_имя: Питание Зависимости: Начальное_имя_службы: LocalSystem

При необходимости, сведения о службе можно получить с использованием оснастки “Службы” консоли управления Microsoft (комбинация клавиш Win+R и выполнить services.msc ), или через меню Панель управления – Администрирование – Службы

Использование Диспетчера задач Windows (taskmgr.exe )

Стандартные диспетчеры задач отличаются по своим возможностям в зависимости от версии Windows. Так, например диспетчер задач Windows XP не имеет собственных возможностей по сопоставлению имени процесса с именем системной службы, а диспетчер задач Windows 10 позволяет это сделать с использованием контекстного меню, вызываемого правой кнопкой мышки:

При выборе пункта Перейти к службам откроется окно со списком служб, в котором будут подсвечены службы, связанные с выбранным процессом svchost.exe


При необходимости, можно нажать на ссылку Открыть службы в нижней части экрана, и, непосредственно из диспетчера задач, открыть список системных служб (оснастку консоли управления Windows services.msc ). Диспетчеры задач Windows Vista – Windows 8.1 менее информативны и обладают меньшей функциональностью, но также позволяют выполнять переход от выбранного процесса к связанным с ним службам.

Использование Process Explorer (procexp.exe ) из пакета Sysinternals Suite

Утилита Process Explorer не входит в состав стандартных дистрибутивов Windows и может быть загружена с сайта Microsoft либо в составе пакета Sysinternals Suite, либо как отдельный программный продукт - Страница загрузки Process Explorer

Программа не требует установки, достаточно разархивировать скачанный пакет и запустить исполняемый файл procexp.exe . Возможности Process Explorer настолько обширны, что даже для их перечисления потребуется отдельная немаленькая статья. А для получения сведений о процессе достаточно просто подсветить его указателем мышки:

Более подробную информацию можно получить, открыв свойства процесса двойным щелчком, или через контекстное меню, вызываемое правой кнопкой мышки - Properties . На вкладке Services отображается полный перечень всех служб, связанных с выбранным процессом.

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

Process - в данной колонке отображается дерево активных процессов и их потомков. Потомок (child) - процесс, созданный другим, родительским (parent) процессом. Любой процесс может быть и потомком, если он создан в ходе выполнения другого процесса, и родителем, если в ходе его выполнения создан другой процесс. Отображение элементов дерева процессов выполняется в соответствии с порядком их запуска в ходе загрузки операционной системы и ее дальнейшего функционирования.

Корнем дерева процессов является уровень System Idle Process . Фактически, это не реальный процесс, а индикатор состояния простоя системы, когда центральный процессор не выполняет каких-либо программ. Следующим элементом дерева представлен уровень System . Этот уровень так же, не является реальным процессом и предназначен для отображения активности системы, связанной с обработкой прерываний, работой системных драйверов, диспетчера сеансов Windows (Session Manager) smss.exe , и csrss.exe (Client - Server Runtime). Элемент Interrupts является уровнем для индикации обработки аппаратных прерываний, элемент DPCs - для индикации обработки отложенных вызовов процедур (Deferred Procedure Calls). Механизм обработки аппаратных прерываний в Windows предполагает как бы двухуровневую обработку. При возникновении запроса на прерывание, сначала, получает управление программа-обработчик аппаратного прерывания, выполняющая лишь самые необходимые критические операции, а остальные действия откладываются до тех пор, пока не появится относительно свободное процессорное время. Тогда эти действия будут выполнены в рамках вызова отложенной процедуры. В многопроцессорных системах каждый процессор имеет свою отдельную очередь отложенных вызовов. Порядок обработки очереди запросов на прерывание и очереди отложенных процедур определяется их приоритетами . Для определения приоритетов используется уровень запроса на прерывание IRQL - программно-аппаратный механизм, применяемый для синхронизации выполнения отдельных процессов в операционных системах семейства Windows. Уровни IRQL аппаратных прерываний задаются программированием регистров контроллера прерываний, а уровни IRQL программного кода операционной системы - реализуются программно.

Степень использования ресурсов уровнем System дерева процессов, отображаемого программой Process Explorer , характеризует занятость операционной системы диспетчеризацией и обработкой прерываний. Высокая степень использования процессора для обработки прерываний может указывать на наличие проблем с оборудованием или некорректно работающий драйвер устройства. Обычно, это сопровождается эффектом заметного снижения общей "полезной" производительности системы и внешне проявляется в виде “тормозов” и «подвисаний» на пользовательских задачах.

Остальная часть дерева отображает иерархию реально выполняющихся в Windows процессов. Так, например, приложение служб и контроллеров SERVICES.EXE обеспечивает создание, удаление, запуск и остановку служб (сервисов) операционной системы, что и отображается в списке порождаемых им процессов.

PID - идентификатор процесса PID - уникальное десятичное число, присваиваемое каждому процессу при его создании.

CPU - уровень использования центрального процессора.

Private Bytes - объем оперативной памяти, выделенной данному процессу и не разделяемой с другими процессами.

Working Set - рабочий набор процесса, представляющий собой суммарный объем всех страниц используемой им памяти, в данный момент времени. Размер этого набора может изменяться, в зависимости от запросов процесса. Практически все процессы используют разделяемую память.

Description - описание процесса

Company Name - имя компании-разработчика.

Path - путь и имя исполняемого файла.

Verified Signer - признак достоверности цифровой подписи исполняемого файла. Наличие строки "Not verified" говорит о том, что цифровая подпись отсутствует или ее не удалось проверить. Для проверки цифровой подписи нужен доступ в Интернет.

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

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

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

Использование Process Explorer позволяет легко определить дополнительные признаки, которые могут принадлежать вредоносной программе, замаскированной под легальный процесс:

В пути исполняемого файла присутствует папка для хранения временных файлов (TEMP), или в случае с svchost.exe , путь отличается от \Windows\System32

Отсутствует информация о производителе программного обеспечения.

Отсутствует цифровая подпись. Большинство производителей программного обеспечения имеют сертификаты с цифровой подписью для своих программ. Для проверки подписи можно нажать кнопку Verify . Необходим доступ в Интернет.

Отсутствуют поля описания загрузочного образа Version и Time

Имя исполняемого файла соответствует имени реально существующего системного файла Windows, но путь отличается от \WINDOWS, \WINDOWS\SYSTEM32 или \WINDOWS\SysWOW64 (для 64-разрядных систем). Это характерно для вирусов, маскирующихся под наиболее часто встречающиеся программные модули - svchost.exe, smss.exe, csrss.exe, winlogon.exe и т.п.

Путь исполняемого файла совпадает c \WINDOWS или \WINDOWS\SYSTEM32 , но имя немного отличается от распространенных имен системных файлов - swchoct.exe вместо svchost.exe и т.п.

Исполняемый файл находится в \WINDOWS или \WINDOWS\SYSTEM32, но дата его создания значительно отличается от даты создания остальных системных файлов и приблизительно соответствует предполагаемой дате заражения.

Кроме отображения информации, утилита позволяет убить выбранный процесс или дерево процессов. В ОС Windows XP и более ранних, уничтожение некоторых системных процессов, как например winlogon.exe , может приводить к синему экрану смерти (BSoD), а в более поздних версия Windows – к аварийному завершению сеанса пользователя.

В дополнение к данному материалу.

Как запустить приложение в виде службы 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.

Как запустить приложение в виде службы 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. Не самое красивое, но вполне соответствующее своему названию 🙂