2 Stimmen

Ist es eine schlechte Idee zu erzwingen JVM Neuladen von "java.library.path"?

Szenario:

Ich habe ein Applet, das eine .dll verwenden muss. Diese .dll MUSS sich im PATH befinden. Um die .dll über das Applet auf PATH zu bekommen, MUSS der Benutzer, der den Browser ausführt, über Administratorrechte verfügen (in der Regel durch Rechtsklick auf das Symbol Als Administrator ausführen...).

Problem:

Ich möchte, dass es nicht mehr notwendig ist, administrative Rechte zu erwerben.

Die schlechte Idee Ich möchte, dass das Applet die Datei irgendwo im Home-Verzeichnis des Benutzers speichert. Ich würde diesen Pfad gerne zu PATH hinzufügen. Anscheinend kann dies über getan werden:

    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;
    } 

Frage

Ist es eine schlechte Idee, die JVM zu zwingen, dies zu tun? Ist dies mit undokumentierten Methoden / ist es einfach nur hacky?

Andere Bits

Da dies ein Applet ist, kann ich nicht java.library.path über -D Option angeben, richtig?

Dieser Code befindet sich in einem Intranet. Er ist nicht für den durchschnittlichen Internet-Nutzer gedacht.

3voto

GeertPt Punkte 14438

Field.setAccessible( true ) ist immer hacky und undokumentiert. Es ändert ein privates Feld! Vielleicht haben Sie Glück und es funktioniert für alle unterstützten JVMs, und es wird sich in Zukunft nicht mehr ändern.

Ich mache mir auch Gedanken darüber, was passieren würde, wenn die JVM aus irgendeinem Grund eine Version Ihrer DLL im vorherigen java.library.path findet und lädt, bevor Sie den Pfad ändern. Ich vermute, sie würde die geladene Version behalten und die neue nicht laden.

Wenn Sie in einer kontrollierten Umgebung arbeiten, können Sie diese Probleme vielleicht ignorieren, aber ich würde Sie ermutigen, eine andere Lösung zu finden. Sagen Sie den Benutzern z. B., dass sie die DLL mit einem einfachen Installationsprogramm per Fernzugriff installieren sollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X