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

标签 java path applet

场景:

我有一个必须使用 .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 执行此操作是一个坏主意吗?这是使用未记录的方法/只是简单的黑客行为吗?

其他位

因为这是一个小程序,所以我无法通过 -D 选项指定 java.library.path,正确吗?

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

最佳答案

field.setAccessible( true ) 总是很hacky并且没有文档记录。它改变了私有(private)领域!也许您很幸运,它适用于所有受支持的 JVM,并且在将来任何时候都不会改变。

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

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

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

相关文章:

java - 如何只转义消息而不是 log4j 中的所有行?

java - 功率图算法

javascript - 如何在nodejs中创建文件路径 'OS agnostic'?

Java Web 安装程序 - 他们是如何做到的?

java - 如何让小程序读取客户端上的任意文件? (创建 uploader )

java - struts2值栈实现

java - 匹配此字符串模式的正则表达式

emacs - 如何为 Emacs 修复损坏的 Lisp 目录路径?

bash - 如何递归地将子目录添加到 PATH?

java - 为什么 Applet 不能在 NetBeans 上运行?我怎样才能让他们运行?