Как превратить программу в службу

Безглавые процессы (без интерфейса) в Windows называются службами. Их можно контролировать (запускать, останавливать и т. Д.), Используя стандартные средства управления Windows, такие как консоль командной строки, панель Powershell или вкладка «Службы» в диспетчере задач. Хорошим примером может быть приложение, которое предоставляет сетевые службы, такие как веб-приложение, или, возможно, приложение резервного копирования, которое выполняет различные фоновые архивные задачи. Существует несколько способов создания и установки приложения Python как службы в Windows.

Сценарий Python, который может выполняться как служба

Модули, используемые в этом примере, являются частью pywin32 (расширения для Python для Windows). В зависимости от того, как вы установили Python, вам может потребоваться установить это отдельно.

import win32serviceutil import win32service import win32event import servicemanager import socket class AppServerSvc (win32serviceutil.ServiceFramework): _svc_name_ = «TestService» _svc_display_name_ = «Test Service» def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.hWaitStop = win32event.CreateEvent(None,0,0,None) socket.setdefaulttimeout(60) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_,»)) self.main() def main(self): pass if __name__ == ‘__main__’: win32serviceutil.HandleCommandLine(AppServerSvc)

Это просто шаблон. Ваш код приложения, возможно, ссылающийся на отдельный скрипт, будет находиться в функции main ().

Наша программа для отключения ненужных служб Windows 11, 10

Вам также потребуется установить это как услугу. Лучшим решением для этого на данный момент является использование Non-sucking Service Manager . Это позволяет вам установить службу и предоставить графический интерфейс для настройки командной строки, выполняемой службой. Для Python вы можете это сделать, что создает сервис за один раз:

nssm install MyServiceName c:python27python.exe c:tempmyscript.py

Где my_script.py — это скрипт шаблона выше, модифицированный для вызова вашего сценария приложения или кода в функции main (). Обратите внимание, что служба не запускает скрипт Python напрямую, он запускает интерпретатор Python и передает ему основной сценарий в командной строке.

Кроме того, вы можете использовать инструменты, предлагаемые в наборе ресурсов Windows Server Resource для вашей версии операционной системы, чтобы создать службу.

Запуск веб-приложения Flask в качестве сервиса

Это вариант типичного примера. Вам просто нужно импортировать скрипт приложения и вызвать его метод run() в функции main() службы. В этом случае мы также используем модуль многопроцессорности из-за проблемы с доступом к WSGIRequestHandler .

import win32serviceutil import win32service import win32event import servicemanager from multiprocessing import Process from app import app class Service(win32serviceutil.ServiceFramework): _svc_name_ = «TestService» _svc_display_name_ = «Test Service» _svc_description_ = «Tests Python service framework by receiving and echoing messages over a named pipe» def __init__(self, *args): super().__init__(*args) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) self.process.terminate() self.ReportServiceStatus(win32service.SERVICE_STOPPED) def SvcDoRun(self): self.process = Process(target=self.main) self.process.start() self.process.run() def main(self): app.run() if __name__ == ‘__main__’: win32serviceutil.HandleCommandLine(Service)
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow

  • Начало работы с языком Python
  • * args и ** kwargs
  • ArcPy
  • ChemPy — пакет python
  • Conditionals
  • ConfigParser
  • ctypes
  • Enum
  • hashlib
  • Heapq
  • HTML-анализ
  • ijson
  • kivy — кроссплатформенная платформа Python для разработки NUI
  • Loops
  • Mutable vs Immutable (и Hashable) в Python
  • Neo4j и Cypher используют Py2Neo
  • os.path
  • Pandas Transform: операции надготовкой по группам и конкатенация результатов
  • pip: Менеджер пакетов PyPI
  • PostgreSQL
  • py.test
  • pyaudio
  • Pygame
  • Pyglet
  • PyInstaller — Распространение кода Python
  • Python Anti-Patterns
  • Python HTTP Server
  • Python Lex-Yacc
  • Python и Excel
  • setup.py
  • tempfile NamedTemporaryFile
  • Tkinter
  • Unicode
  • URLLIB
  • WebSockets
  • Абстрактное синтаксическое дерево
  • Абстрактные базовые классы (abc)
  • Альтернативы для переключения оператора с других языков
  • Асинхронный модуль
  • аудио
  • Безопасность и криптография
  • Библиотека подпроцессов
  • Булевы операторы
  • Введение в RabbitMQ с использованием AMQPStorm
  • Ввод, подмножество и вывод внешних файлов данных с использованием Pandas
  • вдавливание
  • Веб-скребок с Python
  • Визуализация данных с помощью Python
  • Виртуальная среда Python — virtualenv
  • виртуальная среда с virtualenvwrapper
  • Виртуальные среды
  • Возведение
  • Вывоз мусора
  • Вызовите Python с C #
  • Выполнение динамического кода с помощью `exec` и` eval`
  • Генераторы
  • граф-инструмент
  • группа по()
  • Дата и время
  • Двоичные данные
  • Декораторы
  • дескриптор
  • Джанго
  • Доступ к атрибутам
  • Доступ к базе данных
  • Доступ к исходному коду и байт-коду Python
  • Задавать
  • Запись в CSV из строки или списка
  • Заявление о прохождении
  • Идиомы
  • Импорт модулей
  • Индексация и нарезка
  • Инструмент 2to3
  • Интерпретатор (консоль командной строки)
  • Интерфейс шлюза веб-сервера (WSGI)
  • Исключения
  • Исключения из Содружества
  • Использование модуля «pip»: диспетчер пакетов PyPI
  • Использование петель внутри функций
  • Итераторы и итераторы
  • Классы
  • Кодовые блоки, кадры выполнения и пространства имен
  • колба
  • Комментарии и документация
  • Контекстные менеджеры («with» Statement)
  • Копирование данных
  • Кортеж
  • логирование
  • Манипулирование XML
  • Массивы
  • Математический модуль
  • Метаклассы
  • Многомерные массивы
  • Многопоточность
  • многопроцессорная обработка
  • Модуль base64
  • Модуль Deque
  • Модуль dis
  • Модуль Functools
  • Модуль Itertools
  • Модуль JSON
  • Модуль os
  • модуль pyautogui
  • Модуль Sqlite3
  • Модуль Webbrowser
  • Модуль коллекций
  • Модуль локали
  • Модуль очереди
  • Написание расширений
  • начать с GZip
  • Неизменяемые типы данных (int, float, str, кортеж и frozensets)
  • Неофициальные реализации Python
  • Несовместимость, перемещающаяся с Python 2 на Python 3
  • Область переменных и привязка
  • Общие проблемы
  • Объекты недвижимости
  • Операторский модуль
  • Определение функций со списком аргументов
  • Оптимизация производительности
  • Оптическое распознавание символов
  • Основные входные и выходные данные
  • Основные проклятия с Python
  • откладывать в долгий ящик
  • отладка
  • Параллельное вычисление
  • Параллельность Python
  • перегрузка
  • Переопределение метода
  • Перечисление списков
  • Плагины и расширения
  • Побитовые операторы
  • Повышение пользовательских ошибок / исключений
  • Подключение Python к SQL Server
  • Подключение Secure Shell в Python
  • Подкоманды CLI с точным выводом справки
  • подсчет
  • подушка
  • поиск
  • Полиморфизм
  • Пользовательские методы
  • Последовательная связь Python (pyserial)
  • Построение графика с помощью Matplotlib
  • Примеси
  • Приоритет оператора
  • Проверка наличия и разрешения пути
  • Программирование IoT с использованием Python и малины PI
  • Простые математические операторы
  • профилирование
  • Процессы и потоки
  • Работа над глобальным блокировщиком перевода (GIL)
  • Работа с ZIP-архивами
  • Разбор аргументов командной строки
  • развертывание
  • Разница между модулем и пакетом
  • Распаковка файлов
  • распределение
  • Регулярные выражения (регулярное выражение)
  • Рекурсия
  • Розетки
  • Связанные списки
  • Сериализация данных
  • Сериализация данных сортировки
  • Сеть Python
  • системный
  • Скорость программы Python
  • Скрытые функции
  • Сложная математика
  • Случайный модуль
  • События, отправленные сервером Python
  • Создание виртуальной среды с помощью virtualenvwrapper в окнах
  • Создание пакетов Python
  • Создание службы Windows с использованием Python
  • Сокеты и шифрование / расшифровка сообщений между клиентом и сервером
  • Сообщение Python Requests
  • Сортировка списка (выбор частей списков)
  • Сортировка, минимальная и максимальная
  • Специальная переменная __name__
  • Список
  • Список деструктурирования (ака упаковка и распаковка)
  • Список рекомендаций
  • Сравнения
  • стек
  • Стойкость к Python
  • Строковые методы
  • Строковые представления экземпляров класса: методы __str__ и __repr__
  • Сходства в синтаксисе, Различия в значении: Python и JavaScript
  • Тестирование устройства
  • Тип подсказки
  • Типы данных Python
  • толковый словарь
  • Узел узлового списка
  • уменьшить
  • Файлы и папки I / O
  • Фильтр
  • Форматирование даты
  • Форматирование строк
  • функции
  • Функциональное программирование на Python
  • Функция карты
  • Функция печати
  • Частичные функции
  • Черепашья графика
  • Чтение и запись CSV
  • Шаблоны в python
  • Шаблоны проектирования
  • Юникод и байты
Читайте также:
Айфон как флешка программа

Источник: learntutorials.net

Как восстановить службы по умолчанию Windows 10

Запуск программы как службы windows 10

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы 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 можно указать ключи, необходимые для запуска службы.

запуск NSSM

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

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

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

настройки выключения службы в NSSM

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

настройки выхода для службы в NSSM

На вкладке «Input/Output (I/O)» можно задать перенаправление вводавывода приложения в указанный файл.

вкладка I/O в NSSM

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

вкладка Environment в NSSM

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

nssm install notepad ″C:Windowssystem32notepad.exe″

Управление службой

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

Читайте также:
Установка программ с wpi

свойства службы

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

служба NSSM в диспетчере задач

Удаление службы

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

удаление службы в NSSM

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

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

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».

разрешаем службе взаимодействие с рабочим столом

А дальше начинаются чудеса Cлужба, запущенная в интерактивном режиме, открывается в изолированном сеансе (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7Server 2008 эта служба активна по умолчанию, а в Windows 8Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLMSystemCurrentControlSetControlWindows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0.

разрешаем запуск интерактивных служб

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

Start-Service -Name ui0detect

включаем службу обнаружения

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»

окно обнаружения запуска интерактивной службы

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

нулевой сеанс

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию

Windows, Программное обеспечение

Запуск приложения как службы Windows

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

SC

Входящая в Windows программа SC позволяет легко создавать службы Windows, а так же проводить другие различные с ними манипуляции — удаление, отключение, включение, и т. д. Создается служба достаточно просто, для этого достаточно запустить командную строку от имени администратора, и выполнить там следующую команду:

sc create [ИМЯ СЛУЖБЫ] binPath=[ПУТЬ К ИСПОЛНЯЕМОМУ ФАЙЛУ] DisplayName=[ОТОБРАЖАЕМОЕ ИМЯ СЛУЖБЫ] type=own start=auto
Удаляется же служба еще проще:
sc delete [ИМЯ СЛУЖБЫ]

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

NSSM

  1. Предположим, нужно создать службу для веб-сервера nginx под Windows. Для этого, запускаем командную строку с правами администратора, и переходим в директорию с распакованным исполняемым файлом nssm.exe.
  2. Затем выполняем команду, начинающую установку службы:

nssm install nginx

  • Откроется окно с настройками создаваемой службы.

    На самой первой вкладке «Application«, в строке «Path» задается путь к исполняемому файлу, «Startup Directory» — рабочая директория, а «Arguments» — параметры запуска. В самом низу расположена строка «Service Name«, где задается имя создаваемого сервиса.

    На вкладке «Details» можно задать имя, под которым будет отображаться создаваемая служба в списке служб, а так же описание службы, которое будет отображаться там же. В выпадающем списке «Startup Type» можно выбрать тип запуска службы.

    Вкладка «Log on» позволяет указать пользователя, под которым будет запускаться служба.Заполним все нужные поля и выбрав нужные настройки, остается только нажать кнопку «Install service«, для установки службы.
  • После нажатия кнопки «Install service«, служба будет создана, но при этом запустить её нужно будет вручную (либо перезагрузить компьютер, чтобы служба с параметром запуска «Auto» запустилась при его запуске).
  • Так же удалить службу можно с помощью команды в командной строке:

    nssm remove [ИМЯ СЛУЖБЫ] confirm

    Программа как служба или как превратить любую программу в службу на Windows

    Рано или поздно, у простого пользователя или прожженого сисадмина возникает такая ситуация как: «Превратить программу в службу». Зачем это нужно, и в чем отличие. Если сильно не вдаваться в подробности то слушайте. Служба — это такое приложение , которое автоматически запускается при старте Windows, и работает в фоновом режиме. Сразу же поясняю что к чему.

    По поводу автозапуска — не всегда пользователю требуется запуск службы автоматически со стартом системы, это всегда можно изменить и настроить как вам нужно. По поводу фоновой работы — эта такой способ работы приложения, при котором оно не взаимодействует с рабочем столом, т.е. не отображается.(Тихо и незаметно работает на своем месте) Столкнулся я с такой проблемой при подключении к базе данных 1С через Публикатор (Аналог 1С Линк) развернутый на Windows server 2012.

    Читайте также:
    Программа которая угадывает то что ты загадал

    Все было отлично, программа работала и тихо раздавала базы, но случился маленький ньюанс. После выхода из пользователя , под которым была запущена программа, базы перестали раздаваться т.к. Публикатор завершил свою работу. Что же делать? Было решено сделать из программы Публикатор» — службу.

    Тогда программа сможет работать постоянно, независимо от того, какой пользователь запущен. Сейчас я вам покажу, как просто, без каких либо крутых навыков превратить почти любую программу в службу. Во первых, нам потребуется программа под названием NSSM расшифровывается как Non-Sucking Service Manager. Скачать ее можно на официальном сайте: Ссылка на сайт Программы Прямая ссылка на скачивание программы : Прямая ссылка на скачку программы Скачав по ссылке, вы получите архив, внутри которого находиться:

    Папки:
    scr — папка с исходниками программы, вдруг вы захотите покапаться во внутренностях программы или переделать ее под себя.
    win32 — папка с программой рассчитанной под операционную систему windows разрядностью 32 бита.
    win64 — папка с программой рассчитанной под операционную систему windows разрядностью 64 бита.

    Файлы:
    ChangeLog.txt — файл с описанием изменений каждой версии программы.
    README.txt — файл с описанием программы.

    Теперь, когда мы познакомились с содержимым архива, приступим к установке. В зависимости от разрядности вашей системы 32/64 бита, выбираем папку с программой.(Если у вас разрядность системы 32 бита то выбираем win32, если 64 то win64). Переносим эту папку в корень диска с операционной системой(Желательно), и запускаем командную строку(Вызвать ее можно комбинацией клавиш Win+R, и в сплывающем окне набрать cmd и нажать OK)


    Откроется командная строка,и в ней набираем команду cd и путь к программе nssm. Например:

    Далее набираем команду — nssm install + имя будущей службы. Например:

    И перед нами предстает окно программы nssm.

    Расскажу коротко о настройках которые нам потребуются.

    Path — в этом поле указываем путь к программе которую мы хотим переделать в службу(Обязательно).
    Startup directory — директория нахождения программы(Обязательно).
    Arguments — дополнительные параметры запуска программы(Не обязательно).
    Service name — наименование будущей службы(Можно назвать как угодно, хоть MEGASLUZBA).

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

    Перезагрузите компьютер, или запустите службу вручную из диспетчера задач. (Правой кнопкой мыши по службе — запустить)

    P.S.на всякий случай,если у вас не работает стабильно ваша программа, то в разделе process, уберите галочку Console Windows.

    Что бы внести изменения в вашу службу, запустите командную строку и введите команду: nssm edit + название вашей службы

    Источник: windowser.ru

    Преобразовать программу C++ в службу Windows?

    Я написал консольную программу, которая «делает что-то» — в основном, используя ускорение. Как преобразовать его в службу Windows? Что я должен знать о службах Windows заранее?

    6 ответы

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

    Как только вы создадите и запустите службу Windows, вы обнаружите следующую важную проблему: отлаживать ее очень сложно. Там нет терминала (и, следовательно, нет stdout/stderr), и как только вы пытаетесь запустить исполняемый файл, он фактически запускает службу, а затем возвращается к вам.

    Один трюк, который я нашел очень полезным, заключается в добавлении -foreground вариант для вашего приложения, так что если вы запустите этот флаг, оно обойдёт начальный код службы и вместо этого будет работать как обычное консольное приложение, что значительно упрощает отладку. В VS.Net настройте параметры отладки для вызова с этим флагом.

    Здесь есть несколько полезных советов по отладке (особенно использование gflags для автоматического запуска отладчика): support.microsoft.com/kb/824344 — the_mandrill

    Да, если вы запустите без флага, служба будет установлена ​​и запущена (именно так должны работать службы). Если вы запускаете с параметром -foreground, он пропускает этап установки службы. — the_mandrill

    Для ведения журнала вместо записи в стандартный вывод вы можете использовать библиотеку ведения журнала, например log4cplus.sourceforge.net or log4cpp.sourceforge.net. — Coyote21

    На msdn есть действительно хороший пример здесь

    Это шаблонный сервисный проект C++, который имеет функции самостоятельной установки/удаления и регистрирует события запуска и остановки службы в журнале событий Windows. Его можно остановить и запустить через приложение службы (snap), как и другие службы. Вы можете изначально дать ему права LocalSystem, чтобы увидеть, как он работает, так как, по крайней мере, на xp у него недостаточно прав, чтобы начать с предоставленными проектом правами LocalService. В противном случае проект Visual Studio 2008 работает сразу после установки, несмотря на то, что загруженные инструкции подразумевают обратное.

    Немного поздно, но я надеюсь, что это поможет кому-то еще.

    Источник: stackovergo.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru