设置服务的环境变量

Be *_*ers 11 windows-server-2012-r2

我在 Windows 2012 机器上运行 tomcat。

我需要在服务启动之前设置一个环境变量,以便我可以在 Web 应用程序中用 Java 查询该变量,如下所示:

String myVar = System.getenv("MY_VAR");
Run Code Online (Sandbox Code Playgroud)

该变量不是 tomcat 变量。它是特定于我们的应用程序的变量。

我没有将 tomcat 包含在这个问题的标签中,因为这适用于任何服务;不过,我很高兴能得到一个具体的 Tomcat 答案。

这是我要求tomcat特定解决方案的问题: https://superuser.com/questions/1142406/setting-user-environment-variables-for-tomcat-on-windows

我使用Windows管理服务的方式,从“管理工具”->“服务”访问来启动和停止tomcat。所以据我所知,我没有通常的控制权,可以将环境变量放入也启动服务器进程的 .bat 文件中。

Ver*_*Ray 13

如果您想仅为服务设置环境变量(无论它以什么用户身份运行),您可以在注册表中执行此操作:HKLM\SYSTEM\CurrentControlSet\Services

下面是一个向 Windows Update 服务添加两个环境变量的简单示例regedit(仅用于演示目的,这些变量不会影响服务):

  • FOO=Bar
  • KEY=SGVsbG8gV29ybGQhIQ==

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv 环境 REG_MULTI_SZ

启动(或重新启动,如果它已经在运行)该服务。然后我们可以使用 Process Explorer 查看环境变量是否可用:

C:\WINDOWS\system32\svchost.exe -k netsvcs -p -s wuauserv

  • 我这辈子这个答案去哪儿了?我希望我能给它一百万张赞成票。谢谢你! (2认同)

小智 3

如果您寻找的是本地 Server 2012 环境变量,则可以使用 PowerShell 创建新的系统或用户环境变量,确保以管理员身份运行 PowerShell。

机器变量:
[Environment]::SetEnvironmentVariable('Name','Value','Machine')
用户变量:
[Environment]::SetEnvironmentVariable('Name','Value','User')

要检查当前环境变量,请使用以下 PowerShell 命令

Get-Childitem ENV:
Run Code Online (Sandbox Code Playgroud)

注意:您需要关闭 PowerShell 并打开一个新实例才能查看新创建的环境变量。