場景:強制JVM重載「java.library.path」是不是一個好主意?
我有一個必須使用.dll的小程序。 這個.dll必須在PATH上。 爲了通過PATH獲取PAT上的.dll,運行瀏覽器的用戶必須具有管理權限(通常以右鍵單擊圖標以管理員身份運行...)。
問題:
我想刪除其獲得管理privelages的需要。
的壞主意 我想有小程序保存在某個地方的文件中的用戶主目錄內。我想將這條路徑添加到PATH。
System.setProperty("java.library.path", <new path>);
try {
// this forces JVM to reload "java.library.path" property
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception e) {
e.printStackTrace();
init_failure = true;
}
問題
它是一個壞主意,迫使JVM要做到這一點:Appearently,它可以通過做什麼?這是使用無證方法嗎?它只是簡單的黑客?
其他位
因爲這是一個小程序,我無法通過-D選項指定的java.library.path,是否正確?
此代碼位於Intranet中。不適合普通網絡硬漢。
難道大家都不想「不得不取得管理權限」...... – maerics 2012-01-12 16:02:17
是的,這樣做是一個壞主意。這依賴於正在使用的'ClassLoader'的實現細節。這可能不適用於JRE的未來版本或其他供應商的JRE實施;不能保證正在使用的特定'ClassLoader'實現有一個名爲'sys_paths'的字段。 – Jesper 2012-01-12 16:07:09
解決方案很難看,但可能是最難看的解決方案。 ;) – 2012-01-12 16:07:15