2

我正在使用 procrun 将 java 应用程序作为服务运行。

我使用以下设置路径:

set PATH="dir1;dir2;%PATH%"
procrun.exe //US//%SERVICE_NAME% ++Environment PATH=%PATH%

它将注册表中的环境值更新为:

在此处输入图像描述

但是,在我的 Java 应用程序中,当我尝试获取PATH的值时:

System.getenv("PATH")

我只得到第一个值(即上述情况下的 dir1。如果我将路径设置为dir2;dir1;%PATH%,我只得到 dir2)

我是以错误的方式检索还是以错误的方式设置?

4

1 回答 1

0

您的问题是由于选项中缺少引用引起的--Environment

将以 key=value 形式提供给服务的环境变量列表。它们使用 # 或 ; 分隔。人物。如果您需要嵌入 # 或 ; 值中的字符将它们放在单引号内。

(参见Procrun 文档)。

由于 Windows 扩展%PATH%为 -;分隔路径列表,因此您需要使用:

procrun.exe //US//%SERVICE_NAME% ++Environment 'PATH=%PATH%'

或者PATH='%PATH',如果您愿意。单引号字符在将其分解为以;- 分隔的参数列表后从参数字符串中剥离(参见源代码)。因此,如果文件夹名称中有单引号,则可能会出现问题。

编辑: procrun 还接受通过双引号(未剥离)进行引用,并且您的PATH变量包含引号,但cmd.exe 的魔力将它们剥离。

于 2021-03-19T07:08:49.703 回答