Это плохая идея, чтобы принудительно перезагрузить JVM "java.library.path"? - PullRequest
2 голосов
/ 12 января 2012

Сценарий:

У меня есть апплет, который должен использовать .dll. Эта .dll ДОЛЖНА жить на PATH. Чтобы получить .dll в PATH, через апплет пользователь, запускающий браузер, ДОЛЖЕН иметь права администратора (обычно это делается щелчком правой кнопкой мыши на значке «Запуск от имени администратора»).

Проблема:

Я бы хотел устранить необходимость получения административных привилегий.

Плохая идея Я хотел бы, чтобы апплет сохранил файл где-нибудь в домашнем каталоге пользователя. Я хотел бы добавить этот путь к 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 сделать это? Это использует недокументированные методы / это просто хакерство?

Другие биты

Поскольку это апплет, я не могу указать java.library.path с помощью опции -D, правильно?

Этот код находится во внутренней сети. Не предназначен для среднего интернет крутого парня.

1 Ответ

3 голосов
/ 12 января 2012

field.setAccessible (true) всегда взломан и недокументирован. Это меняет личное поле! Возможно, вам повезло, и он работает для всех поддерживаемых JVM, и в будущем он не изменится.

Я также беспокоюсь о том, что произойдет, если JVM по какой-то причине найдет и загрузит версию вашего dll в предыдущем java.library.path, прежде чем вы измените путь. Я предполагаю, что это сохранит загруженную версию, а не загрузит новую.

Если вы работаете в контролируемой среде, вы можете игнорировать эти проблемы, но я бы посоветовал вам найти другое решение. Например. Скажите пользователям для удаленной установки DLL с помощью простого установщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...