Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(Windows):使用新的环境变量启动应用程序_Java_Windows_Environment Variables - Fatal编程技术网

Java(Windows):使用新的环境变量启动应用程序

Java(Windows):使用新的环境变量启动应用程序,java,windows,environment-variables,Java,Windows,Environment Variables,我想从Windows上的Java应用程序启动终端(cmd.exe)。目前,它从Java应用程序继承环境变量,这意味着Java应用程序启动时可用的环境变量的状态 我需要如何从Java应用程序中调用cmd.exe,以便获得所有当前环境变量,例如,如果用户在Java应用程序运行时更改了路径(以避免重新启动Java应用程序) 核心问题似乎是如何从(Java)应用程序中访问当前的环境变量,而不是应用程序启动时的状态。Java中无法更改当前的环境变量,因此您的问题不适用。您能更详细地解释一下您想做什么吗?例

我想从Windows上的Java应用程序启动终端(
cmd.exe
)。目前,它从Java应用程序继承环境变量,这意味着Java应用程序启动时可用的环境变量的状态

我需要如何从Java应用程序中调用
cmd.exe
,以便获得所有当前环境变量,例如,如果用户在Java应用程序运行时更改了路径(以避免重新启动Java应用程序)


核心问题似乎是如何从(Java)应用程序中访问当前的环境变量,而不是应用程序启动时的状态。

Java中无法更改当前的环境变量,因此您的问题不适用。您能更详细地解释一下您想做什么吗?例如,您说“如果用户在Java应用程序运行时更改了路径”,但Java不允许您在运行时更改路径变量。在纯Java中,您只能在应用程序开始时使用
System.getenv()访问环境变量
。启动流程时,我可以指定应传递给子流程的不同环境变量。但是我怎么才能知道,Windows环境变量的当前状态是什么(因此终端将以当前环境变量状态启动)?在Windows上,这似乎是可能的-从Altap Salamander(C++应用程序)启动终端使用最新的环境变量状态。您在控制面板中定义的环境变量保存在Windows注册表中(对于系统和用户环境)。从桌面启动进程时,实际上是Windows资源管理器的子进程。资源管理器从注册表读取环境,并将其用于创建的子流程。您可以使用本机代码(即Java本机接口)在Java中实现这一点。我认为,作为一种快捷方式,您也可以调用ShellExecute(从shell32.dll)(但我不能100%确定它从注册表读取环境)。在Java中无法更改当前环境变量,因此您的问题不适用。您能更详细地解释一下您想做什么吗?例如,您说“如果用户在Java应用程序运行时更改了路径”,但Java不允许您在运行时更改路径变量。在纯Java中,您只能在应用程序开始时使用
System.getenv()访问环境变量
。启动流程时,我可以指定应传递给子流程的不同环境变量。但是我怎么才能知道,Windows环境变量的当前状态是什么(因此终端将以当前环境变量状态启动)?在Windows上,这似乎是可能的-从Altap Salamander(C++应用程序)启动终端使用最新的环境变量状态。您在控制面板中定义的环境变量保存在Windows注册表中(对于系统和用户环境)。从桌面启动进程时,实际上是Windows资源管理器的子进程。资源管理器从注册表读取环境,并将其用于创建的子流程。您可以使用本机代码(即Java本机接口)在Java中实现这一点。我认为,作为一种快捷方式,您也可以调用ShellExecute(从shell32.dll)(但我不能100%确定它从注册表读取环境)。