2017-05-04 1 views
1

Die Produktionsumgebung unserer Java Web Application in hat Einschränkungen mehrere Erlaubnisse eingesetzt wird, einer von ihnen nicht in der Lage zu sein in dem Laufwerk C zu schreiben:Extract DLL aus JNA JAR-Datei auf einen benutzerdefinierten Pfad

Wir jna-4.1 vor kurzem hinzugefügt .0.jar und jna-platform-4.1-0.jar Abhängigkeiten in der Lage zu sein, Windows Registry zu lesen, aber ich habe festgestellt, dass jedes Mal, wenn Server (Tomcat v7.0) gestartet wird, eine DLL-Datei in einen temporären Tomcat-Ordner extrahiert wird, geben den folgenden Fehler:

java.lang.UnsatisfiedLinkError: C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp\jna-1319675979\jna1892288885647543043.dll: The handle is invalid

ich, dass das gleiche DLL erfolgreich extrahiert prüft haben Wenn die Zugriffsberechtigungseinschränkung entfernt wurde, um sicherzustellen, dass dies die Quelle meines Problems ist, möchte ich jedoch wissen, ob es einen Pfad gibt, in den diese DLL extrahiert werden muss, da wir in Laufwerk E: schreiben können. beispielsweise.

Antwort

1

Die DLL Sie sehen, ist JNI Bibliothek JNA verwendet nativen Anrufe [0] zu versenden. JNA wird die Bibliothek in einen temporären Ordner extrahieren, es sei denn, aus dem von der jna.boot.library.path Eigenschaft [1] oder mit System.loadLibrary[2] angegeben gefunden.

Das Verzeichnis für temporäre Elemente kann mit der jna.tmpdir Eigenschaft [3] festgelegt werden. Zum Beispiel:

java -jar program.jar -Djna.tmpdir=E:/temp 

Wenn jna.tmpdir nicht gesetzt ist, wird JNA java.io.tmpdir verwenden.

Beachten Sie, dass JNA zum Zeitpunkt des Schreibens File.mkdirs() verwendet, um die Verzeichnisstruktur des tmpdir zu erstellen, so dass Sie nicht sicherstellen müssen, dass die Ordner vorhanden sind.

+0

Jetzt habe ich gesetzt '-Djava.io.tmpdir' meinen benutzerdefinierten Pfad, nennen sie es' E: \ tmp' und jna Bibliothek ist in der Tat dort extrahiert aber ich halte den gleichen Fehler. Das Betriebssystem ist ein Windows 7 Embedded 32-Bit. Fehle ich etwas? –

+0

@SergioMerino könnte auf die Java VM Privilegien in Beziehung gesetzt werden: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:952229840241 – cubrr