【问题标题】:Creation of service with spaces in install path在安装路径中创建带有空格的服务
【发布时间】:2011-08-06 18:29:18
【问题描述】:

我正在使用 Apache 的 procrun 创建 Windows 服务,但无法正确设置它。我正在使用批处理文件来执行 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

【问题讨论】:

    标签: apache batch-file windows-services procrun


    【解决方案1】:

    对于问题 #1,您可以尝试使用仅包含短名称的等效路径。可以在 FOR 循环的帮助下转换长名称路径:

    FOR %%F IN ("C:\Program Files\prunsrv.exe") DO SET prunsrv=%%~sF
    prunsrv … --Install=%prunsrv% …
    

    【讨论】:

    • 哇,将空格转换为 FODLERNAME~1/2/etc..,更重要的是它可以工作。非常感谢你。这叫短名?
    • 一个短名称,是的。转换后的路径中的每个特定名称都不超过 8 个字符,并且最多可以有 3 个字符的扩展名。
    • 查了一下,再次感谢。我从来不知道寡妇能做到的事情。
    • 很高兴知道prunsrv=%%~sF 的神奇之处。如果有任何风险或%%~sF失败的情况
    【解决方案2】:

    我知道这是旧的,但不太聪明的解决方案是:

    设置 JVM_DLL="c:\Program Files\Java\jre6\bin\server\jvm.dll"

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多