Создание службы Windows для реестра RMI

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

C:\Program Files\Java\jdk1.7.0_67\jre\bin\rmiregistry.exe -J-Djava.rmi.server.useCodebaseOnly=false 11100

Я создал службу с помощью Windows sc.exe с помощью команды

sc.exe create Registration_Service binPath = "C:\Program Files\Java\jdk1.7.0_67\jre\bin\rmiregistry.exe -J-Djava.rmi.server.useCodebaseOnly=false 11100"

Но при запуске этой службы я получаю всплывающее окно с сообщением

«Ошибка 1053: служба не ответила на запрос запуска или управления своевременно».

Кто-нибудь может сказать, где я ошибся?


person User Number 1    schedule 16.01.2015    source источник


Ответы (2)


Вы не можете использовать любой произвольный .exe в качестве службы Windows. Есть особые требования. Вам нужно использовать Windows Service Wrapper, которую вы можете скачать с сайта Microsoft.

person user207421    schedule 17.01.2015

Я знаю, что мой ответ на этот вопрос запоздал, но, возможно, он поможет другим, у кого есть такой же вопрос.

Чтобы установить RMI в качестве службы Windows, вы можете использовать Apache Procrun (prunsrv). С Apache Procrun вам не нужно ничего скачивать с сайта Microsoft. Вам также не нужно ничего скачивать. Я использовал это много раз для настройки служб Windows и обертывания как Java, так и других исполняемых программ в качестве собственных служб Windows. Взгляните на: https://commons.apache.org/proper/commons-daemon/procrun.html

Ниже приведен пример запуска RmiRegistry.exe как собственной службы Windows с помощью procrun.

  1. Чтобы запустить реестр RMI, мы используем программу RmiRegistry.exe.
  2. Чтобы остановить реестр RMI, мы используем программу Windows TaskKill.exe.

В командном окне дайте следующие команды:

Чтобы установить RmiRegistry.exe как собственную службу Windows

set svcBaseDir="D:\nativeService"

%svcBaseDir%\bin\prunsrv64 //IS//RmiRegistrySvc ^
        --DisplayName="RMI Registry Service" ^
        --Install=%svcBaseDir%\bin\prunsrv64.exe ^
        --StartMode=exe ^
        --StopMode=exe ^
        --StartImage=<java install dir>\bin\rmiregistry.exe ^
        --StartParams=-J-Djava.rmi.server.useCodebaseOnly=false#11100 ^
        --StopImage=C:\Windows\System32\taskkill.exe ^
        --StopParams=/F#/IM#rmiRegistry.exe ^
        --LogPath=%svcBaseDir%\logs ^
        --StdOutput=auto ^
        --StdError=auto ^
        --LogPrefix=Native-JNI- ^
        --LogLevel debug ^
        --ServiceUser <your windows domain>\<service user name> ^
        --ServicePassword <service password> ^
        --Description="Runs the RMI Registry as a Windows Service" ^
        --Startup=auto

set svcBaseDir=

Конечно, D:\nativeService — это просто произвольное имя каталога. Вы можете выбрать любой каталог на любом диске. Я использую следующую структуру каталогов для этого собственного сервера Windows, но вы можете использовать все, что захотите:

D:\nativeService
|
---- bin
     |
     ---- prunsrv64.exe
----logs

После установки RmiRegistry.exe в качестве собственной службы Windows ее можно запускать, останавливать и перезапускать с помощью диспетчера служб окна, как и любую другую собственную службу Windows.

Чтобы протестировать или запустить собственную службу Windows RmiRegistry.exe на переднем плане (после ее установки)

%svcBaseDir%\bin\prunsrv64 //TS//RmiRegistrySvc

Чтобы удалить собственную службу Windows RmiRegistry.exe из Windows

%svcBaseDir%\bin\prunsrv64 //DS//RmiRegistrySvc

Обратите внимание, что вы используете 64-разрядную версию prunsrv только для 64-разрядных серверов/компьютеров, тогда как 32-разрядную версию prunsrv можно использовать как для 32-, так и для 64-разрядных серверов/компьютеров.

Я переименовал загруженный prusrv.exe в prusrv64.exe для использования на всех 64-битных машинах. Это помогает мне различать 32-разрядную и 64-разрядную версии утилиты prusrv.exe.

person Mody    schedule 15.03.2018