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

Обновлено: 05.07.2024

Для начала скажу, что я зарабатываю через вот этого брокера , проверен он временем! А вот хороший пример заработка , человек зарабатывает через интернет МНОГО МНОГО МНОГО и показывает все на примерах, переходи и читай! Добавь страницу в закладки. А теперь читаете информацию ниже и пишите свой отзыв

Если нам необходимо запустить обыкновенное приложение в качестве службы Windows, то у нас есть как минимум два способа это сделать. Во первых есть утилиты Srvany & Instsrv из Resouce Kit, в во вторых есть очень интересное приложение под названием Non-Sucking Service Manager, которая является свободным программным обеспечением с открытым кодом может работать в операционных системах Microsoft, начиная с Windows 2000 и заканчивая Windows 8. При этом NSSM не требует установки, а взять ее можно на официальном сайте nssm.cc. Рассмотрим чуть подробнее оба способа запуска приложения в качестве службы Windows.

Способ первый – Srvany & Instsrv.

Для начала стоит убедится, что вы работаете под учетной записью администратора, в этом случае у вас не только достаточно прав для любых действий, но и созданная под этим аккаунтом служба будет продолжать работать под остальными учетными записями. Далее, копируем файлы instsrv.exe и srvany.exe в папку system32. Запyскам из командной стpоки следующую команду:

HKLM SYSTEM CurrentControlSet Service Имя_Вашей_службы

Способ второй – Non-Sucking Service Manager.

Открываем командную строку (конечно, с правами администратора) и переходим в папку, в которую мы предварительно распаковали NSSM. Здесь мы вводим команду

nssm install наша_служба

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

nssm install notepad ?полный_путь_к_исполнаемому_файлусам_файл.exe?

Для удаления службы вводим команду:

nssm remove наша_служба

и подтверждаем ее удаление, если ввести команду:

nssm remove notepad confirm

то и подтверждение запрашиваться не будет.

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

hot3.jpg

Почему 80% фермеров кода не могут быть архитекторами? >>>

Что касается вопроса о том, как превратить программу Java в службу Windows, не говорите мне об интерфейсе Win, я не знаком с ним.

Во-первых, превратить программу exe в службу Win

Пакетная команда запуска Java скомпилирована в программу win. Пакетный Сталкер V6.0 или quickbfc 3.6.1 Реализовать;

Затем используйте команду sc, которая поставляется с системой, чтобы создать ее как системную службу: (Чтобы проверить эффект, я добавил параметры для интерактивного запуска службы)

Обратите внимание, что команда Windows всегда была необычной:

Using some of the options will trigger a "[SC] CreateService FAILED 87" this usually means the option used like "type" needs another declaration. In case for instance when using type= interact, the type= option must be declared again with an alternative type like own. So effectivly the service type will be type= own interactive.

После завершения создания вы можете запустить сервис: net start test

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

Поскольку системная служба не знает, в каком состоянии была запущена ваша программа, что считается успешным запуском, а также не знает, была ли программа остановлена ​​нормально или завершилась ненормально.

В конечном итоге способ добавления общей программы в качестве системной службы с помощью команды sc не реализует интерфейс службы Win и не соответствует требованиям для стандартной программы-демона.

Поиск в Интернете и обнаружение, что доступны инструменты разработки Microsoft:Запустите любую программу как службу Windows, используя srvany.exe

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

Но мне не удалось после эксперимента по неизвестным причинам. Фоновый мониторинг обнаружил, что java-программа мигает, а затем быстро закрывается, возможно, причина в том, что classpath установлен неправильно.

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

Кроме того, как упоминалось в статье, средство больше не поддерживается Microsoft, и проблемы совместимости могут возникать с версиями win7 и выше.

Инструменты из мира Java

Различные люди из крупного рогатого скота выразили свои взгляды в этом Q & A:

  • The Java Service Wrapper , Самое известное и зрелое решение в отрасли

Я использовал JSW в течение долгого времени, и стабильность и масштабируемость хорошие. Усовершенствованная версия также обеспечивает обработку исключений Java, например, следует ли автоматически перезапускать службу при генерации OOM.

Недостатком является то, что платные 64-битные версии требуют покупки лицензии. Пять лет назад вам, возможно, не нужно было беспокоиться о том, нужна ли вам 64-битная JVM, но сегодня 1,5-битной кучи 32-битной памяти немного недостаточно.

wrapper.conf Пример файла конфигурации выглядит следующим образом: (официальный пакет загрузки содержит более подробные примеры и инструкции)

  • Yet Another Java Service Wrapper Реализация с открытым исходным кодом, похожая на JSW

Возможно, YAJSW заменил JSW, потому что он с открытым исходным кодом и бесплатный, и поддерживает Быстрая и плавная миграция с JSW , Но есть Друзья сказали, что они напуганы загрузкой пакета 19M . так что .

  • Apache Commons Daemon , Член знаменитого инструментария Apache Commons
  • WinRun4J, Коллекция Java2exe2service, дополнительный экспорт в один клик плагина eclipse!

Следующие инструменты не были проверены мной, но не означают, что они не применимы:

javaservice (Не обновляется после 2006 года, метод использования неизвестен)

Java Service Launcher(Компактный, поддерживает 64-битную JVM и JRockit и другие сторонние виртуальные машины, но, к сожалению, документация относительно сырая)

Launch4jИнструмент для упаковки Jar в качестве исполняемого файла, но, к сожалению, используя конфигурацию XML, лично ничего не чувствую

Смотрите больше инструментов с открытым исходным кодом:Java-пакет с открытым исходным кодом

Давно потерянный демон Apache Commons

Сначала поговорим о чувствах: Tomcat, я думаю, многие студенты знакомы с ним с первого дня изучения Java. Увидев значок ACD, я обнаружил, что оригинальная версия установки Tomcat win использует его!

Давайте поговорим об использовании: программа ввода для версии WinprocrunИспользовать его для создания сервиса очень просто:

Есть много параметров, вы можете понять, посмотрев на комментарии. Здесь также есть китайский перевод: Procrun of Commons Daemon 。

Procrun может не только генерировать Java-классы в сервисы, но и изменять exe-сервисы в сервисах. Подробнее см. В настройках параметров.

В-четвертых, посмотрите на мощный WinRun4J

Давайте сначала поговорим о его недостатках: ему нужен класс входа, который зависит от пакета WinRun4J.jar, который имеет определенную степень связности по сравнению с ACD, вместо того, чтобы напрямую использовать основной класс запуска. Кроме того, все выглядит хорошо ~

The only drawback is that it requires a special class for working as a service (instead of simply calling standard main class)

На официальном веб-сайте есть служба создания каштанов, которая также включена в загруженный пакет, но есть некоторые проблемы:

Вызывается в вышеуказанном классе EventLog.report Журнал, созданный методом, будет записан только в системный журнал. Управление компьютером-Инструменты системы-Просмотр событий-Приложения Чтобы увидеть

Расположение соответствующего файла журнала в системе XP: C:\WINDOWS\system32\config\ SysEvent.Evt

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

Скомпилируйте вышеупомянутые классы, чтобы сгенерировать файл класса, а затем отредактируйте файл конфигурации. WinRun4Jc.ini :

  • WinRun4Jc.ini и WinRun4Jc.exe Должен быть в том же каталоге и иметь то же имя, потому что нет параметров для указания пути к профилю .
  • Вышеуказанные параметры являются обязательными, и service.id и service.name Обязательно напишите одно и то же название сервиса
  • classpath.2 Указано как WinRun4J.jar Путь, потому что класс записи службы выше реализует класс в пакете

Создайте и удалите сервисы с помощью следующих команд:

WinRun4J также обеспечиваетEclipse плагинИ небольшой инструмент для добавления иконки ico в программу exe, использование очень простое, есть инструкции на официальном сайте.

В любом случае, WinRun4J эквивалентен комбинации ACD и Launch4j. Хотя общая функция не такая мощная, как у двух, у них тоже все хорошо.

Специально для студентов, использующих Eclipse, это намного удобнее: взгляните на его интимную функцию экспорта.

А разве прикладные программы не могут работать в скрытом режиме и точно так же запускаться вместе с Windows, будучи добавленными в автозагрузку?

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

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

Сайт NSSM

Создавать службу (чисто для примера) мы будем из процесса скрипта PowerShell , замеряющего среднее значения загруженности процессора и сохраняющего данные в текстовый лог.

Скрипт

Выполнить с помощью PowerShell

Если в консоли будет выведен запрос на разрешение выполнения скриптов, вводим Y и нажимаем ввод .

Запрос на разрешение

Транскрибирование запущенно

Logs

Создаем службу

Теперь переходим к работе с Non-Sucking Service Manager. Открыв от имени администратора командную строку и перейдя в расположение исполняемого файла утилиты nssm.exe соответствующей разрядности, выполняем команду nssm install logCPUAvg , где logCPUAvg — имя новой службы.

В открывшемся окошке установщика вы увидите три поля:

  • Path – в нем указываем путь к обработчику, то есть PowerShell, файл консоли находится в папке C:\Windows\System32\PowerShell .
  • Startup directory – папка с исполняемым файлом обработчика, поле заполнится автоматически.
  • Arguments – в этом поле прописываем команду -ExecutionPolicy Bypass -NoProfile -File "полный-путь-к-скрипту" .

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

Non-Sucking Service Manager

Non-Sucking Service Manager

Автоматически

Лог службы

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

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

Подтверждаем действие

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

Как создать, зарегистрировать новую службу Windows из обычного приложения и поставить его в автозагрузку?
У этого приложения будут права администратора?


4 ответа 4

Можно через консоль, т.е создаешь внутри программы процесс консоли и посылаешь ему что-то типа этого:

Служба так же автоматом добавится в автозапуск.

Еще есть Installutil, но если не ошибаюсь, то у него меньше возможностей чем у SC.


Эм.. Ну не заработает же? Вроде нельзя взять произвольное приложение и скормить в sc . И почему в коде кавычки наклоные?

А разве в вопросе идет речь про произвольное приложение? Я тело вопроса понял так : Есть приложение и оно должно зарегистрировать другую службу. Как-то двусмысленно трактовать можно.

Хм.. Тогда ok. просто я понял вопрос так: "есть произвольное приложение и я хочу его запустить как службу" :)

С этой темой есть грязный лайфхак, когда в кач-ве binpath передается, что то вроде "CMD.exe /c /b path_to_exe". Тогда запускается консоль и прежде чем быть грохнутой (ибо не служба) вызовет в безграфическом режиме нужное приложение. К слову работает не у всех, у меня так и не получилось, но множество отзывов положительных слышал о такой методике.

Есть такая программка - XyNtService с исходниками.

Я ее допиливал. Здесь исправленная и улучшенная версия (с исходниками).

На OneDrive - там два файла: XYNTServiceProject_src.zip и XYNTServiceProject_v03.zip


Произвольное приложение запустить как службу Windows нельзя, оно должно соответствовать требованиям службы.

Можно сделать простую службу, которая будет запускать и контролировать произвольное приложение, указанное в параметрах например. Чтобы не сильно страдать при создании службы, можно воспользоваться, например, TopShelf, который доступен из NuGet, и свести работу к минимуму.

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


Иногда вам нужно приложение или скрипт, чтобы продолжать работать вне зависимости от того, авторизованы вы на своем компьютере или нет. Может быть, это сценарий PowerShell для мониторинга портов или веб-сервер, на котором размещена страница в вашей домашней сети.

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

Что мне нужно для создания службы Windows?

Чтобы создать службу Windows в Windows 10, необходимо выполнить несколько предварительных условий:

  • Доступ администратора на компьютере
  • Что-то для запуска в качестве службы (сценарий PowerShell, программа и т.д.)
  • Установлен Non-Sucking Service Manager (NSSM)

Что такое менеджер службы без присасывания?

Да, вы не можете отказаться от такого имени, не объяснив его. Конечно, название неудачное, но оно точное. Диспетчер служб Non-Sucking (NSSM), пожалуй, самый простой способ создать службу Windows, которая будет одновременно высоконадежной и настраиваемой. Кроме того, это бесплатное программное обеспечение с открытым исходным кодом (OSS).


NSSM можно использовать через командную строку Windows или графический интерфейс пользователя (GUI). Это означает, что им может пользоваться каждый. NSSM можно использовать в любой версии Windows, начиная с Windows 2000 включительно. Существуют 32-битные и 64-битные версии. Если вы используете 64-битный компьютер, сначала попробуйте эту версию. Если это не сработает, вернитесь к 32-битной версии.

Вы можете скачать NSSM с веб-сайта, клонировать NSSM из Git или установить NSSM с помощью Chocolatey. Chocolatey — это менеджер пакетов для Windows. Способы установки будут зависеть от выбранного вами маршрута. См. Инструкции NSSM. В нашем примере мы загружаем с веб-сайта NSSM и устанавливаем его в C:\WINDOWS\system32 .

Создание службы Windows с помощью NSSM

В этом примере мы создадим службу из сценария PowerShell для регистрации среднего процента загрузки ЦП.

  1. Скопируйте и сохраните этот сценарий как log-CPULoadPercentage.ps1 в месте, которое вряд ли будет доступно для кого-либо еще. Попробуйте создать каталог C:/Scripts и сохранить его там. Кроме того, создайте папку в скриптах под названием Logs. Обратите внимание, что путь к сценарию — C:/Scripts/log-CPULoadPercentage.ps1 . Это понадобится вам позже.

Удаление службы Windows с помощью NSSM

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

Вот и все. Рекомендуется проверить диспетчер служб, чтобы убедиться, что службы больше нет. Если вы все еще видите службу, возможно, вам нужно обновить экран, и он должен исчезнуть.

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

Читайте также: