Рецепти приготування windows services з python-скриптів, я

Виникла у мене недавно необхідність (а може просто непереборне бажання) зробити парочку Windows служб з Python-скриптів. Трохи порившись в «інтернетах» я виявив, що здійснити це не так вже й складно і, більш того, способів існує аж. два. Отже, господині на замітку.

Рецепт перший. для невередливих

Цей рецепт дозволяє приготувати Windows службу не тільки з Python скрипта, але і взагалі з будь-якої програми. Для приготування знадобляться:

Якщо все інгредієнти присутні, то справа залишається за малим - змішати, струснути, вжити з'єднати всі разом, для чого робимо наступне:

  1. Виконуємо в командному рядку

де - бажане ім'я сервісу, тобто саме так він буде називатися в оснащенні Services
Увага, шлях до srvany.exe потрібно вказувати повністю!

Як було зазначено вище, використовувати instserv.exe необов'язково, замість нього можна скористатися стандартною утилітою SC. У разі використання цієї утиліти в командному рядку необхідно виконати наступне:

де - бажане ім'я сервісу.
Увага! Шлях до srvany.exe потрібно вказувати повністю. Після binpath = обов'язково повинен бути пробіл, інакше нічого працювати не буде!

  • Створюємо reg файл такого змісту:

    Увага! Слеші обов'язково повинні бути подвійними.
    У разі, якщо ви створюєте службу не з Python-скрипта, то ключ Application повинен містити шлях до програми, яку ви хочете запускати як Windows Service, а AppDirectory і AppParametrs робочу директорію і параметри його запуску відповідно.

  • Додаємо ключі зі створеного файлу до реєстру
  • Відкриваємо оснащення Services і запускаємо свіжоспечену службу, або виконуємо в командному рядку:
  • Рецепт другий. для гурманів

    Чому для гурманів? Та тому, що цей рецепт, по-перше, має на увазі приготування служби без використання сторонніх утиліт, по-друге, реалізується за допомогою Windows API з усіма наслідками, що випливають (тобто дозволить, наприклад, виконати необхідні дії при зупинці служби або записувати все що вам необхідно в Event Log). Для приготування знадобляться:

    1. PyWin32 (скажу по-секрету, що приклад реалізації служби присутній в демо-скриптах цього пакета, просто не всі їх дивилися)
    2. hands.dll

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