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

Я создаю службу Windows, используя procrun Apache, и у меня возникают трудности с ее правильной настройкой. Я использую пакетный файл для выполнения установки procrun. Мой вопрос двоякий.

  1. Я не могу создать службу с пробелами в имени. Этот пример был взят из Apache и устанавливает установку службы prunsrv:

    prunsrv //IS//TestService --DisplayName="Test Service" \
        --Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \
        --StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \
        --StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2
    

    У меня есть установленная служба где-то в C:\Program Files\, в которой есть пробел. Мне нужно, чтобы путь --Install был «C:\Program Files\prunsrv.exe», чтобы правильно указать правильный путь. Если я не заключаю путь в кавычки:

    --Install=C:\Program Files\prunsrv.exe
    

    Служба Windows считает, что путь установки:

    C:\Program
    

    Это недопустимое местоположение. Когда я использую:

    --Install="C:\Program Files\prunsrv.exe"  (or) 
    "--Install=C:\Program Files\prunsrv.exe"
    

    Служба Windows считает, что путь установки:

    "C:\Program Files\prunsrv.exe"
    

    ... что также является недопустимым местоположением (он буквально пытается выполнить этот путь с кавычками.)

    Кто-нибудь знает, как правильно установить службу Windows с пробелами в пути?

  2. Если возникнут дальнейшие сложности, было бы неплохо иметь более подробную документацию. Есть ли у кого-нибудь дополнительная документация по procrun или примеры ее использования? Список ресурсов, которые я нашел до сих пор, таков:

    Похоже, что хороший ресурс, используемый в других вопросах, больше недоступен: http://blog.platinumsolutions.com/node/234


person Noah    schedule 06.08.2011    source источник


Ответы (2)


Для вопроса № 1 вы можете попробовать использовать эквивалентный путь, состоящий только из коротких имен. Путь с длинным именем можно преобразовать с помощью цикла FOR:

FOR %%F IN ("C:\Program Files\prunsrv.exe") DO SET prunsrv=%%~sF
prunsrv … --Install=%prunsrv% …
person Andriy M    schedule 06.08.2011
comment
Ничего себе, это преобразует пробелы в FODLERNAME~1/2/etc.., и что более важно, это работает. Большое спасибо. Это называется короткое имя? - person Noah; 08.08.2011
comment
Короткое имя, да. Каждое конкретное имя в преобразованном пути не длиннее 8 символов и может иметь расширение до 3 символов. - person Andriy M; 08.08.2011
comment
Посмотрел, еще раз спасибо. Я никогда не знал, что вдовы могут делать. - person Noah; 09.08.2011
comment
Было бы неплохо узнать, что делает магия prunsrv=%%~sF. И если есть какие-либо риски или случаи, когда %%~sF не работает - person user1338413; 16.03.2015

Я знаю, что это старое, но немного менее умное решение:

установить JVM_DLL="c:\Program Files\Java\jre6\bin\server\jvm.dll"

prunsrv //IS//%SERVICE_NAME% --Jvm=%JVM_DLL%

person Greg L.    schedule 28.01.2013