【问题标题】:Extract DLL from within JNA jar file to a custom path从 JNA jar 文件中提取 DLL 到自定义路径
【发布时间】:2017-05-04 05:52:12
【问题描述】:

我们的Java Web Application部署的生产环境有几个权限限制,其中一个是不能写入C盘:

我们最近添加了 jna-4.1.0.jar 和 jna-platform-4.1-0.jar 依赖项,以便能够读取 Windows 注册表,但我注意到每次启动服务器 (Tomcat v7.0) 时都会启动一个 DLL文件被解压到 Tomcat 临时文件夹,出现以下错误:

java.lang.UnsatisfiedLinkError: C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp\jna-1319675979\jna1892288885647543043.dll: The handle is invalid

我已经验证,当访问权限限制被移除时,同一个 DLL 被成功提取,以确保这是我的问题的根源,但我想知道是否有任何方法可以指定该 DLL 必须位于的自定义路径提取到,因为我们可以写入驱动器 E:,例如。

【问题讨论】:

    标签: java tomcat dll jna


    【解决方案1】:

    您看到的 DLL 是 JNA 的 JNI 库,用于调度本机调用 [0]。 JNA 会将库解压缩到一个临时文件夹,除非从 jna.boot.library.path 属性 [1]System.loadLibrary [2] 指定的目录中找到。

    可以使用jna.tmpdir 属性[3] 设置用于临时项目的目录。例如:

    java -jar program.jar -Djna.tmpdir=E:/temp
    

    如果未设置jna.tmpdir,JNA 将使用java.io.tmpdir

    请注意,在撰写本文时,JNA 将使用File.mkdirs() 创建tmpdir 的目录结构,因此您无需确保文件夹存在。

    【讨论】:

    • 现在我已将-Djava.io.tmpdir 设置为我的自定义路径,我们称之为E:\tmp,并且确实在那里提取了jna 库,但我一直收到同样的错误。操作系统是 Windows 7 嵌入式 32 位。我错过了什么吗?
    • @SergioMerino 可能与 Java VM 的权限有关:asktom.oracle.com/pls/asktom/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2010-10-01
    • 2018-11-11
    相关资源
    最近更新 更多