如何动态加载AttachProvider(attach.dll)
发布时间:2020-12-14 01:55:54 所属栏目:Windows 来源:网络整理
导读:我正在使用jdk的tools.jar中的com.sun.tools.attach,它需要一个指定的 java.library.path env,指向启动时的attach.dll以正确设置提供程序,如 WindowsAttachProvider.由于某些原因,我需要动态加载捆绑的attach.dll之一.我试着用这样的东西: public static vo
我正在使用jdk的tools.jar中的com.sun.tools.attach,它需要一个指定的
java.library.path env,指向启动时的attach.dll以正确设置提供程序,如
WindowsAttachProvider.由于某些原因,我需要动态加载捆绑的attach.dll之一.我试着用这样的东西:
public static void main(String[] args) throws Exception { Path bin = Paths.get(System.getProperty("user.dir"),"bin").toAbsolutePath(); switch (System.getProperty("os.arch")) { case "amd64": bin = bin.resolve("win64"); break; default: bin = bin.resolve("win32"); } // Dynamic setting of java.library.path only seems not sufficient System.setProperty("java.library.path",System.getProperty("java.library.path") + File.pathSeparator + bin.toString()); // So I try to manual loading attach.dll. This is not sufficient too. System.load(bin.resolve("attach.dll").toString()); // I'm using com.sun.tools.attach in my app new myApp(); } 如果我用jdk(在normall jre中)运行它,它会向我报告: java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.WindowsAttachProvider could not be instantiated: java.lang.UnsatisfiedLinkError: no attach in java.library.path Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException: no providers installed at com.sun.tools.attach.VirtualMachine.attach(... 如何安装附件提供程序而不指定-Djava.library.path在启动时指向attach.dll? 解决方法
你正在使用的API是使用
loadLibrary(String).看起来你不能通过首先调用更明确的
load(String)来成功抢占(使其成功).
所以你必须在java.library.path中指定路径. 该System属性在JVM生命周期的早期设置,并且不能通过标准方法进行修改. 因此,传统的解决方案是在启动JVM时传递适当的java.library.path. 或者,您可以查看hack以在使用反射启动JVM后更改此属性.我还没有尝试过这些. 例如,见here: System.setProperty( "java.library.path","/path/to/libs" ); Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" ); fieldSysPath.setAccessible( true ); fieldSysPath.set( null,null ); 顺便说一句,我建议您预先挂起现有路径的自定义路径,而不是替换它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-vista – Windows中的OS.symlink支持
- 远程桌面报错解决:No Remote Desktop License Servers Ava
- exchange-2003 – microsoft exchange 2003和iPad2
- 为Windows编写跨平台(32位和64位兼容)程序(如.NET中的AnyCP
- windows – 如何利用备用工作站驱动器空间进行服务器存储/备
- 不同于Windows的Linux系统中命令运用(一)
- windows – SSL证书存储在哪里?
- Windows10系统:任务栏中电池图标消失问题的解决方法
- windows – 列出nodejs中的分区
- windows – 双模式可执行文件是否可行?
推荐文章
站长推荐
- windows – 如何跟踪WinRT应用程序(在Win32中很简
- 为什么要在Windows服务中托管wcf服务?
- windows-phone-8 – 适用于Windows Phone 8的任何
- Windows Azure Ubuntu – 500 OOPS:在建立FTP连
- Windows10 下安装 Apache2.4+PHP7.1+MySQL5.7
- windows-server-2008-r2 – NetApp FAS 2040 LDA
- windows – Dialog具有时尚设计的现代外观,但在运
- winforms – Devexpress Windows Controls使用不
- 安装 – 在Windows 7上安装Visual Studio 2015社
- windows – FOSSIL(版本控制系统)不添加.htacces
热点阅读