Як запустити додаток у вигляді служби 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, можна обійтися і без підтвердження.
Запуск служби в інтерактивному режимі
Основна відмінність призначеного для користувача додатки від служби полягає в тому, що після запуску додаток може вимагати для продовження роботи додаткових дій з боку користувача - наприклад натиснути кнопку або ввести команду.Для цього необхідно отримати до нього доступ, що як виявляється, не так-то просто зробити.
Для того, щоб запустити службу в інтерактивному режимі, треба в оснащенні Служби відкрити її властивості і на вкладці «Вхід в систему »відзначити чекбокс« Дозволити взаємодію з робочим столом ».
А далі починаються чудеса