从 JNA jar 文件中提取 DLL 到自定义路径
Extract DLL from within JNA jar file to a custom path
我们的 Java Web 应用程序部署的生产环境有几个权限限制,其中之一是无法写入驱动器 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:,例如。
您看到的 DLL 是 JNA 的 JNI 库,用于分派本机调用 [0]. JNA will extract the library to a temporary folder, unless found from the directory specified by the jna.boot.library.path
property [1], or with System.loadLibrary
[2]。
可以使用 jna.tmpdir
属性 [3] 设置用于临时项目的目录。例如:
java -jar program.jar -Djna.tmpdir=E:/temp
如果未设置jna.tmpdir
,JNA 将使用java.io.tmpdir
。
请注意,在撰写本文时,JNA 将使用 File.mkdirs()
创建 tmpdir
的目录结构,因此您无需确保文件夹存在。
我们的 Java Web 应用程序部署的生产环境有几个权限限制,其中之一是无法写入驱动器 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:,例如。
您看到的 DLL 是 JNA 的 JNI 库,用于分派本机调用 [0]. JNA will extract the library to a temporary folder, unless found from the directory specified by the jna.boot.library.path
property [1], or with System.loadLibrary
[2]。
可以使用 jna.tmpdir
属性 [3] 设置用于临时项目的目录。例如:
java -jar program.jar -Djna.tmpdir=E:/temp
如果未设置jna.tmpdir
,JNA 将使用java.io.tmpdir
。
请注意,在撰写本文时,JNA 将使用 File.mkdirs()
创建 tmpdir
的目录结构,因此您无需确保文件夹存在。