Java 如何配置YAJSW在磁盘上查找jnidispatch.dll?

Java 如何配置YAJSW在磁盘上查找jnidispatch.dll?,java,dll,jna,yajsw,Java,Dll,Jna,Yajsw,我们使用YAJSW将Java应用程序包装为Windows服务。测试工作站映像时,corporate McAfee Antivirus会发出警告,因为在启动服务时,JNIDSpatch.dll会从jna-4.1.0.jar复制到临时文件夹中的新名称 将dll签名添加到防病毒规则可防止显示停止错误,但每次都会弹出严重警告 我们尝试将JNIDSPATH.dll复制到C:\DLLfolder并将以下行添加到wrapper.conf: wrapper.java.additional.4=-Djna.boo

我们使用YAJSW将Java应用程序包装为Windows服务。测试工作站映像时,corporate McAfee Antivirus会发出警告,因为在启动服务时,JNIDSpatch.dll会从jna-4.1.0.jar复制到临时文件夹中的新名称

将dll签名添加到防病毒规则可防止显示停止错误,但每次都会弹出严重警告

我们尝试将JNIDSPATH.dll复制到C:\DLLfolder并将以下行添加到wrapper.conf:

wrapper.java.additional.4=-Djna.boot.library.path=C:/DLLfolder/

然后,我们将C:\DLLfolder添加到Windows系统%PATH%并重新启动了Windows

但是,在监视Windows服务启动时,我们仍然可以看到DLL被从Jar中提取出来,而防病毒程序会抱怨

YAJSW代码native.java中的注释是:

When JNA classes are loaded, the native shared library (jnidispatch) is
loaded as well.  An attempt is made to load it from the any paths defined
in <code>jna.boot.library.path</code> (if defined), then the system library
path using {@link System#loadLibrary}, unless <code>jna.nosys=true</code>.
If not found, the appropriate library will be extracted from the class path
(into a temporary directory if found within a jar file) and loaded from
there, unless <code>jna.noclasspath=true</code>. 

我们缺少什么步骤?

我确认我们通过以下措施解决了问题:

1) 将-Djna.nounpack=true添加到wrapper.conf

2) 从JAR中删除了2个JNIDSpatch.dll 32位和64位dll

3) 将DLL放置在Windows路径上

请注意,要安装Windows服务,需要jnidispatch.dll


非常感谢technomage

使用
-Djna.debug\u load.jna=true运行,查看jna在哪里查找
jnidispatch.dll
。JNA会将调试信息发送到stdout,因此在作为服务运行时可能很难捕获它。您还可以使用
-Djna.nounpack=true
阻止解包。谢谢,将在目标上测试并更新post。确认以下工作: