1. 程式人生 > >java 解除安裝動態連結庫

java 解除安裝動態連結庫

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Vector;

public class FreeDynamicDll {
 static {
  // 首先確保這些dll檔案存在
  System.load("c:/test/Decode.dll");
 }

 /**
  * 解除安裝已經裝載的dll
  *
  * @param dllName
  *            庫名,如Decode.dll
  */
 

 private synchronized void freeDll(String dllName) {
  try {
   ClassLoader classLoader = this.getClass().getClassLoader();
   Field field = ClassLoader.class.getDeclaredField("nativeLibraries");
   field.setAccessible(true);
   Vector<Object> libs = (Vector<Object>) field.get(classLoader);
   Iterator<Object> it = libs.iterator();
   Object o;
   while (it.hasNext()) {
    o = it.next();
    Field[] fs = o.getClass().getDeclaredFields();
    boolean hasInit = false;
    for (int k = 0; k < fs.length; k++) {
     if (fs[k].getName().equals("name")) {
      fs[k].setAccessible(true);
      String dllPath = fs[k].get(o).toString();
      if (dllPath.endsWith(dllName)) {
       hasInit = true;
      }
     }
    }
    if (hasInit) {
     Method finalize = o.getClass().getDeclaredMethod(
       "finalize", new Class[0]);
     finalize.setAccessible(true);
     finalize.invoke(o, new Object[0]);
     it.remove();       
     libs.remove(o);
    }
   }

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 
 public static void main(String args[]) {
  FreeDynamicDll t = new FreeDynamicDll();
  t.freeDll("Decode.dll");
 }
}

相關推薦

java 解除安裝動態連結

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import java.util.Vector; public class FreeDyna

使用Java呼叫dll動態連結

一:什麼是dll? DLL(Dynamic Link Library)檔案為動態連結庫檔案,又稱“應用程式拓展”,是軟體檔案型別。在Windows中,許多應用程式並不是一個完整的可執行檔案,它們被分割成一些相對獨立的動態連結庫,即DLL檔案,放置於系統中。當我

淺談JAVA呼叫C++動態連結

如:      public native 返回型別 方法名(引數列表); 注意,這些方法沒有方法體。。 程式中呼叫這裡的方法和呼叫平常的方法的方式是一樣的。 --------------------------------------------------------------------------

java 呼叫c++動態連結

        JNI其實是Java Native Interface的簡稱,也就是java本地介面。它提供了若干的API實現了和Java和其他語言的通訊(主要是C&C++)。也許不少人覺得Java已經足夠強大,為什麼要需要JNI這種東西呢?我們知道Java是一種

關於顯示載入動態連結模組及解除安裝的問題

問題起因是,在一次模組解除安裝後,程式執行異常。遂對動態連結庫做一些測試。 動態庫載入方式有兩種,隱式載入和顯示載入,隱式載入包含xxx.lib匯入庫,在程式執行之前由動態載入器完成所有載入;顯示載入則使用LoadLibrary方式;具體資料可參考《程式設計師的自我修養:連結,裝載與庫》一書。 動態庫標頭檔案

Tensorflow安裝在windows 上面出現ImportError: DLL load failed: 動態連結(DLL)初始化例程失敗。

      最近開始學習tensorflow,電腦是win10 64位系統的,已經安裝了python3.6.1 32位的,tensorflow只支援python64位的,所以直接安裝了Python64位3.6.1。直接使用pip install tenso

JAVA呼叫動態連結so檔案

最近專案在用到openjdk1.8時,出現以下異常,綜其原因是JDK1.8中libjavajpeg.so估計缺少某些函式。 記錄一下,這裡有一篇關於動態連結庫的文章,比較不錯,轉載推薦一下:http://www.cnblogs.com/duanxz/p/3651347.html Exception in t

使用Java的JNative呼叫dll動態連結

1,首先下載JNative的庫,其中包含JNative.jar, JNativeCpp.dll, libJNativeCpp.so這三個包。       JNative.jar是需要匯入到Java工程的lib下。 通過Build Path即可匯入

win10環境下MySql(5.7.21版本)安裝過程出現安裝MySQL無法定位程式輸入點fesetround於動態連結

Mysql  安裝時報錯: 無法定位程式輸入點fesetround於動態連結庫MSVCR120.dll上 解決方法:下載 Microsoft Visual C++ 2013 Redistributable Package 安裝 http

Win7安裝Oracle10 無法定位程式輸入點GetProcessImageFileNameW於動態連結PSAPL.DLL上

1,首先到資料庫的解壓包database\stage\prereq\db中,找到refhost.xml,右鍵選擇編輯,在檔案裡面找到5.2,新增6.1,儲存(如圖所見)   <OPERATING_SYSTEM> <VERSION VALUE="6.1"/> <

Java通過JNI 呼叫動態連結DLL

JNI(Java Native Interface)Java本地介面,主要作用是實現java程式碼與C、C++編寫的程式碼互動。 在Android程式設計中,so庫的訪問也用到了jni技術。 理論多說無益,還是看java連線dll的實戰吧。如下: 例:java中呼叫demo.

JAVA通過JNI呼叫C++動態連結CLL(一)

簡介 本文筆者,詳細的演示JAVA通過JNI呼叫C++動態連結庫CLL的開發過程和涉及到知識點介紹,入門級簡單易懂 (一)Java本機介面(Java Native Interfa

windows server 2003 安裝軟體就報錯“無法定位程式輸入點Encodepointer於動態連結KERNEL32.dll上”

電腦一安裝軟體就報錯“無法定位程式輸入點Encodepointer於動態連結庫KERNEL32.dll上”,系統是用的2003,這臺電腦主要用於做伺服器的。 打完windows 2003server 的補丁就可以了  WindowsServer2003-KB9149

安裝jdk8出現無法定位程式輸入點regdeletekeyexa於動態連結ADVAPI32.dll上

官方的 jdk8 不支援xp, 在xp上安裝會提示 動態連結庫錯誤。 無法定位程式輸入點 RegDeleteKeyExA 於動態連結庫 ADVAPI32.dll 上。     xp安裝 jdk8 方法如下 1 用 7-zip 解壓 jdk-8-windows-i586.e

java jni呼叫c/c++的so動態連結簡易demo

需求:            工作中需要多個團隊協作開發,而不同團隊提供的程式語言不同,比較常見的是底層互動使用C++或c來實現任務排程,java層實現業務排程或者業務實現,正好有涉及到這方面的應用,就分享一下java使用jni呼叫linux中so檔案的幾個注意事項編寫簡易的

java呼叫C/C++生成的dll動態連結----藉助JNI

由於專案的需要,最近研究了java 呼叫DLL的方法,將如何呼叫的寫於此,便於日後查閱: 採用的方法是JNI:Java Native Interface,簡稱JNI,是Java平臺的一部分,可用於讓Java和其他語言編寫的程式碼進行互動。 下面是從網上摘取的JNI工作示意圖: 總體說明:先在JA

mysql5.7壓測工具sysbench dbt2安裝找不到lmysqlclient動態連結

問題 近期安裝linux centos6安裝mysql5.7後想用sysbench、dbt2進行壓測,死活安裝不上 cd /usr/local/sysbench make && make install 出現錯誤,lmysqlclient檔

Ubuntu 16.04 amd64架構下安裝使用i386程式動態連結依賴

設定啟用多架構 在終端輸入 dpkg –print-architecture 你將會看到像下面這樣的內容: amd64 這說明著你已經擁有了64位架構核心。 輸入 dpkg –pr

win10升級後,已經安裝的sql2000提示無法定位序數1於動態連結sqlunirl.dll解決辦法

轉自:http://blog.sina.com.cn/s/blog_a8dc361e0102wt37.html 解決方法: 1、首先取得許可權,TrustedInstaller許可權.只要將下面的登錄檔檔案匯入,就有TrustedInstaller許可權。    登錄檔

java中呼叫本地動態連結(*.DLL)的兩種方式詳解和not found library、打包成jar,war包dll無法載入等等問題解決辦法

我們經常會遇到需要java呼叫c++的案例,這裡就java呼叫DLL本地動態連結庫兩種方式,和載入過程中遇到的問題進行詳細介紹 1、通過System.loadLibrary("dll名稱,不需要字尾名