Java 将JNAJAR文件中的DLL提取到自定义路径

Java 将JNAJAR文件中的DLL提取到自定义路径,java,tomcat,dll,jna,Java,Tomcat,Dll,Jna,部署Java Web应用程序的生产环境有几个权限限制,其中之一是无法在驱动器C中写入: 我们最近添加了jna-4.1.0.jar和jna-platform-4.1-0.jar依赖项,以便能够读取Windows注册表,但我注意到,每次启动服务器(Tomcat v7.0)时,都会将一个DLL文件提取到Tomcat临时文件夹中,并出现以下错误: java.lang.UnsatifiedLink错误:C:\Program Files\Apache Software Foundation\Tomcat 7

部署Java Web应用程序的生产环境有几个权限限制,其中之一是无法在驱动器C中写入:

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

java.lang.UnsatifiedLink错误:C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp\jna-1319675979\jna1892288885647543043.dll:句柄无效


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

您看到的DLL是用于分派本机调用的JNA的JNI库。除非从
JNA.boot.library.path
属性指定的目录或使用
System.loadLibrary
找到,否则JNA将把库解压缩到临时文件夹中

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

java -jar program.jar -Djna.tmpdir=E:/temp
如果未设置
jna.tmpdir
,jna将使用
java.io.tmpdir


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

现在,我已经将
-Djava.io.tmpdir
设置为我的自定义路径,让我们称之为
E:\tmp
,jna库确实在那里被提取,但我不断得到相同的错误。操作系统是一个嵌入式32位的Windows7。我遗漏了什么吗?@SergioMerino可能与Java虚拟机的特权有关: