Ответ 1
Причиной этой ошибки было то, что я не переименовал prunsrv.exe
в TestService.exe
. Аналогично, Prunmgr.exe должен быть TestServicew.exe.
Очень важно, чтобы эти файлы были переименованы.
Я пытаюсь установить и запустить сервис с prunsrv.exe для приложения
Я могу установить службу в порядке, но служба не запускается и дает мне ошибку
Также приведена конфигурация, используемая для установки службы с помощью prunsrv.exe
set SERVICE_NAME=TestService
REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=INFO
REM Path to java installation
set PR_JVM=C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
set PR_CLASSPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\temp.jar;
REM Startup configuration
set PR_STARTUP=auto
set PR_STARTMODE=java
set PR_STARTCLASS=Trys.AppLauncher
set PR_STARTMETHOD=start
REM Shutdown configuration
set PR_STOPMODE=java
set PR_STOPCLASS=Trys.AppLauncher
set PR_STOPMETHOD=stop
REM JVM configuration
set PR_JVMMS=64
set PR_JVMMX=128
set PR_JVMSS=4000
REM Install service
prunsrv.exe //IS//%SERVICE_NAME%
Приведенная конфигурация упакована в пакетный файл для установки службы
Также файлы журнала не генерируются, из-за которых я даже не могу отлаживать отладки.
Скажите, пожалуйста, где я ошибаюсь
Причиной этой ошибки было то, что я не переименовал prunsrv.exe
в TestService.exe
. Аналогично, Prunmgr.exe должен быть TestServicew.exe.
Очень важно, чтобы эти файлы были переименованы.
одной возможной проблемой является неправильный prunsvr.exe
. для установки 64-битной java используйте amd64/prunsvr.exe
, для 32-разрядной установки java, используйте /prunsvr.exe
в файле commons-deamon-xxx-bin-windows.zip.
Это может быть много. Сначала проверьте журналы. Значение по умолчанию -...
% SystemRoot%\System32\LogFiles\Apache
Оттуда вы сможете получить более конкретную ошибку. Например. Путь к классам, путь Java или некоторая другая опция недействительна.
Если вы запускаете службу из Service Manager, а не из командной строки, вам нужно установить CLASSPATH, JAVA_OPTS и т.д. в реестр. Из здесь:
Основные определения службы хранятся под ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>
Дополнительные параметры сохраняются в реестре по адресу:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\<ServiceName>\Parameters
В 64-разрядной Windows procrun всегда используется 32-разрядный просмотр реестра для хранения конфигурации. Это означает, что параметры будут храниться внутри:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\<ServiceName>
В случае, если кто-то найдет это полезным. У меня была такая же проблема: "Область данных, переданная системному вызову, слишком мала". Это связано с тем, что программа не может найти jvm.dll в StartMode = jvm.
Решение: все зависит от вашего StartMode. 1) если "--StartMode" - jvm, вы должны указать параметр "--jvm" как путь к jvm.dll 2) если "--StartMode" является java или exe, установите параметр "--jvm" как автоматический (ваша программа будет запущена как отдельные procces с именем java.exe)
У меня была такая же проблема на моем ноутбуке, но она работала на другом ноутбуке, который имеет ту же конфигурацию.
Я проверил %SystemRoot%\System32\LogFiles\Apache\commons-daemon.log
. Я обнаружил следующую ошибку отсутствующий файл изображения,
Затем я обнаружил, что нам нужно поставить двойные кавычки по всем параметрам. На вашем примере, если вы попробуете
pushd %CD%
Попробуйте это ниже.
"prunsrv.exe" //IS//%SERVICE_NAME%
--Startup="%PR_STARTUP%"
--Jvm="%PR_JVM%"
--Classpath="%PR_CLASSPATH%"
--StartMode="jvm"
--StopMode="jvm"
--StartClass="%PR_STARTCLASS%"
--StartMethod="%PR_STARTMETHOD%"
--StopClass="%PR_STOPCLASS%"
--StopMethod="%PR_STOPMETHOD%"
ПРИМЕР ОБРАЗЦА http://www.eclipse.org/jetty/documentation/current/startup-windows-service.html
Мне удалось запустить службу на моем локальном компьютере, но я получил ту же ошибку на виртуальной машине, работающей с Windows 2012R2.
Проблема была вызвана двумя причинами:
На виртуальной машине я использовал установку JDK вместо простой JRE, а JAVA_HOME указывал на папку JDK bin. Мне пришлось изменить параметр -Jvm из "auto" в фактический файл jvm.dll, расположенный в подпапке JRE.
Несмотря на то, что я изменил параметр -Jvm, служба все еще показывала ошибку во время запуска. Мне также пришлось использовать версию prunsrv.exe amd64 для решения проблемы.
Просто сравнив это с установкой script, единственная непосредственная вещь, которую я вижу, это то, что вы, возможно, должны сделать настройки вашей памяти похожими на
REM JVM configuration
set PR_JVMMS=64m
set PR_JVMMX=128m
set PR_JVMSS=128m
И, кстати, JRE 1.6.0_04 несколько ошибочно устарел...
НТН Гироскоп
У меня была такая же ошибка, но все, что мне нужно было сделать, это запустить администратор script as (на сервере Windows 2012)... По-видимому, система разрешений на Windows 2012 изменилась: ex. на сервере Windows 2008 эта ошибка не возникала (такой же script).