Рецепти приготування windows services з python-скриптів, я
Виникла у мене недавно необхідність (а може просто непереборне бажання) зробити парочку Windows служб з Python-скриптів. Трохи порившись в «інтернетах» я виявив, що здійснити це не так вже й складно і, більш того, способів існує аж. два. Отже, господині на замітку.
Рецепт перший. для невередливих
Цей рецепт дозволяє приготувати Windows службу не тільки з Python скрипта, але і взагалі з будь-якої програми. Для приготування знадобляться:
Якщо все інгредієнти присутні, то справа залишається за малим - змішати, струснути, вжити з'єднати всі разом, для чого робимо наступне:
- Виконуємо в командному рядку
де
Увага, шлях до srvany.exe потрібно вказувати повністю!
Як було зазначено вище, використовувати instserv.exe необов'язково, замість нього можна скористатися стандартною утилітою SC. У разі використання цієї утиліти в командному рядку необхідно виконати наступне:
де
Увага! Шлях до srvany.exe потрібно вказувати повністю. Після binpath = обов'язково повинен бути пробіл, інакше нічого працювати не буде!
Увага! Слеші обов'язково повинні бути подвійними.
У разі, якщо ви створюєте службу не з Python-скрипта, то ключ Application повинен містити шлях до програми, яку ви хочете запускати як Windows Service, а AppDirectory і AppParametrs робочу директорію і параметри його запуску відповідно.
Рецепт другий. для гурманів
Чому для гурманів? Та тому, що цей рецепт, по-перше, має на увазі приготування служби без використання сторонніх утиліт, по-друге, реалізується за допомогою Windows API з усіма наслідками, що випливають (тобто дозволить, наприклад, виконати необхідні дії при зупинці служби або записувати все що вам необхідно в Event Log). Для приготування знадобляться:
- PyWin32 (скажу по-секрету, що приклад реалізації служби присутній в демо-скриптах цього пакета, просто не всі їх дивилися)
- hands.dll
Коли всі необхідні приготування будуть закінчені, можна приступати до написання коду. Виглядати він повинен приблизно ось так: