gpt4 book ai didi

java - 强制 JVM 重新加载 "java.library.path"是个坏主意吗?

转载 作者:行者123 更新时间:2023-12-04 06:01:39 24 4
gpt4 key购买 nike

场景:

我有一个必须使用 .dll 的小程序。
该 .dll 必须位于 PATH 上。
为了通过小程序获取 PATH 上的 .dll,运行浏览器的用户必须具有管理权限(通常通过右键单击图标以管理员身份运行...)。

问题:

我想消除必须获得行政特权的需要。

坏主意
我想让小程序将文件保存在用户主目录中的某个位置。我想将该路径添加到PATH。显然,它可以通过以下方式完成:

    System.setProperty("java.library.path", <new path>);

try {
// this forces JVM to reload "java.library.path" property
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
} catch (Exception e) {
e.printStackTrace();
init_failure = true;
}

问题

强制 JVM 这样做是不是一个坏主意?这是使用未记录的方法/只是简单的hacky吗?

其他位

因为这是一个小程序,我不能通过 -D 选项指定 java.library.path,对吗?

此代码位于 Intranet 中。不适合普通的互联网硬汉。

最佳答案

field.setAccessible( true ) 总是 hacky 和无证的。它改变了一个私有(private)领域!也许你很幸运,它适用于所有受支持的 JVM,而且它在 future 的任何时候都不会改变。

我还担心如果 JVM 在您更改路径之前由于某种原因在以前的 java.library.path 中找到并加载了您的 dll 版本会发生什么。我想它会保留加载的版本,而不是加载新的版本。

如果您在受控环境中工作,您可能会忽略这些问题,但我鼓励您寻找其他解决方案。例如。告诉用户使用简单的安装程序远程安装 dll。

关于java - 强制 JVM 重新加载 "java.library.path"是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838113/

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