Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

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

створення служби

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

Також на етапі створення нової служби можна вказати деякі додаткові параметри.

На вкладці "Shutdown" перераховані методи зупинки і тайм-аути, використовувані при штатному завершенні роботи або аварійної зупинки програми. Коли NSSM отримує команду зупинки (напр. При виході з), то він намагається зупинити контрольоване додаток штатним чином. Якщо ж програма не відповідає, то NSSM може примусово завершити всі процеси і підпроцеси цього додатка.

Всього є чотири етапи завершення роботи програми, і за замовчуванням вони використовуватиметься в такому порядку:

• На першому етапі NSSM намагається згенерувати і відправити подія Ctrl + C. Цей спосіб добре працює для консольних додатків або скриптів, але не застосуємо для графічних додатків;
• Потім NSSM визначає всі вікна, створені додатком, і посилає їм повідомлення WM_CLOSE, ініціює вихід з програми;
• Третім етапом NSSM обчислює всі потоки, створені додатком, і відправляє їм повідомлення WM_QUIT, яке буде отримано якщо програма має чергу повідомлень потоку;
• І, як крайня міра NSSM може викликати метод TerminateProcess (), примусово завершивши роботу програми.

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

За замовчуванням при падінні служби NSSM намагається рестартовать її. На вкладці "Exit actions" можна змінити автоматичну дію при позаштатному виході з, а також виставити затримку перед автоматичним перезапуском додатка.

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

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

управління службою

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

видалення служби

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

Start-Service -Name ui0detect

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

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

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

і потрапляємо в нульовий сеанс, в якому працює наш додаток. Далі виробляємо з ним необхідні дії і повертаємося назад.

Як запустити додаток у вигляді служби windows - cmd, other, registry, windows, microsoft windows 8

Таке ось цікаве рішення для запуску додатків у вигляді служб Windows. Чи не найкрасивіше, але цілком відповідне своїй назві