gpt4 book ai didi

java - 使用 Java 设置 Windows 系统变量

转载 作者:可可西里 更新时间:2023-11-01 09:41:01 25 4
gpt4 key购买 nike

有没有办法将特定目录添加到 Windows 系统变量 %PATH%?这似乎不起作用:

String[] cmd = { "cmd", "/c", "set", "PATH=\"%PATH%;c:\\test\"" };
Runtime.getRuntime().exec( cmd );

c:\test\没有出现在 System.getenv("PATH");或者在

的输出中
String[] cmd = { "cmd", "/c", "echo", "%PATH%" };
Runtime.getRuntime().exec( cmd );

我需要的是修改 Windows 下当前 Java 进程的 %PATH% 变量。原因是,我需要加载一些相互交叉引用的 native dll 文件。所以我想将应用程序路径添加到 Windows 环境。

接下来我尝试的是 C 函数“putenv”的小型 JNI 包装器,如下所示:

JNIEXPORT void JNICALL Java_com_splitscreen_AppletTest_PutEnv_putEnv
(JNIEnv *env, jobject jobj, jstring val) {

jboolean iscopy;

const char *mvalue = (*env)->GetStringUTFChars(
env, val, &iscopy);

putenv(mvalue);
}

我是这样调用它的:

final String curPath = System.getenv( "PATH" );
final PutEnv pe = new PutEnv();
pe.putEnv( "PATH=" + curPath + ";c:\test" );

final String newPath = System.getenv( "PATH" );
System.out.println( newPath );

但是路径是相等的。我不确定 Java-System-Environment 的 map 是否未更新或 putenv 是否不起作用。有办法检查吗?

最佳答案

这不起作用的原因是两个 exec() 调用启动了两个不同的 shell;您设置路径的那个不是您 checkin 的那个。

很难更改永久的、系统范围的路径设置。但是您可以在调用一个或多个您需要它的程序期间更改路径。

具体来说,要做的事情是自己编写一个批处理文件(.CMD.BAT,随你喜欢),设置PATH 在开头附近,跟随任何你想用该路径执行的 DOS/Windows 命令,然后 exec() 该脚本文件。


更新当前 Java 进程的 PATH 似乎毫无意义。 Java 一旦运行,就不会关心路径。或者您正在运行一些库代码吗?

如果您使用 exec() 从 Java 运行 DOS/Windows 命令,上述技巧将起作用。


更新:好的,您有一些库代码,出于其自身的原因需要 PATH 设置,并且您想要给它它想要的东西。

我在这里考虑的是启动一个新的 JVM。您可以使用 exec(cmd, envp)envp 中使用一组自定义的环境变量来启动新的 Java 应用程序(“您自己”,在紧要关头)。只需复制已经存在的内容并操作 PATH 的内容(如果有的话)。

启动新 Java 应用程序的标准方法是创建一个新的 ClassLoader,关于如何实现这一点有多种描述。但我不确定您是否可以使用该过程来创建一个新环境 - 因此 exec-ing JVM 可能不仅更简单,而且可能是唯一的方法。

关于java - 使用 Java 设置 Windows 系统变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com