2017-01-02 53 views
0

我在Tomcat的运行作为一种服务,当我打电话通过API在批处理文件中包含一个批处理文件,环境变量通过在用户会话中不可见的服务集

@echo off 
setx /M test_path "C:\test" 
echo "path set " 

而且我有一个Web应用程序另一个批处理文件称为另一个API,它包含

@echo off 
echo test_path :: %test_path% > test.log 
echo "Got the path" 

%test_path%对第二个批处理文件不可见。 我试图让它成为可能,而无需重新启动tomcat服务。

我需要知道是否有可能,

+0

请参阅http://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w是否必须是环境变量? – Richard

+0

@Richard我已经尝试了这些方法,即使我试图通过打开新的命令提示符来回显通过tomcat java web应用程序设置的变量,但它并没有显示出来。 但是,如果我打开和关闭环境变量窗口(sysdm.cpl,EditEnvironmentVariables),那么我可以在用户命令提示符下回显它。 我不知道当我打开和关闭窗口时发生了什么。 – Kamikaze

+0

当第一个和第二个请求到达时,将会启动的进程之间似乎没有关系。在进程A中设置环境变量(将终止)不会影响父进程(API服务)。因此,稍后请求其他API将启动一个新的进程(B)来运行批处理脚本,环境将不会从进程A得到任何内容。 –

回答

0

您可以直接从注册表中读取它。

for /F "tokens=*" %%G IN ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "test_path"^|find " REG_SZ "') DO (set testpath=%%G) 
set testpath=%testpath:~23% 
echo %testpath% 

如果采取这种方法,最好直接在应用程序的关键字下设置注册表值。

+0

@Ricchard,我已经做到了这一点,但仅仅是作为一种工作。但它不是正确的方式来做到这一点,因为我们正在实施它。变量集应该对用户以及我的应用程序在tomcat服务中可见,但使用此方法时,该变量仅对我的应用程序而不是用户可见。我需要它对用户可见 – Kamikaze

+0

不幸的是,似乎没有一种可靠的方法可以在不重新启动的情况下执行此操作。 – Richard

+0

我找到了一个方法。您可以使用[paexec.exe](https://www.poweradmin.com/paexec/)将环境变量(系统/用户)设置为通过cmd(用户)可见。而对于您的应用程序,只需编写注册表中的变量并临时设置它们即可。 – Kamikaze