Question

Nous avons une application Java qui comprend des composants qui fonctionnent en tant que SYSTEM sur les machines Windows. Sous Windows 7 x64, un composant échoue lorsque vous essayez de déballer la bibliothèque jnidispatch:

Exception in thread "main" java.lang.Error: Failed to create temporary file for
jnidispatch library: java.io.IOException: The system cannot find the path
specified
    at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:600)
    at com.sun.jna.Native.loadNativeLibrary(Native.java:550)
    at com.sun.jna.Native.<clinit>(Native.java:87)
    at falcon.util.vmware.VcmdTwo.loadLibraries(VcmdTwo.java:53)

Copié ci-dessous est un extrait des commentaires de la classe maternelle de la jna bibliothèque:

  

Lorsque les classes sont chargées de la JNA, la bibliothèque native partagée (jnidispatch) est       chargé aussi bien. Une tentative est faite pour le charger à partir du chemin de la bibliothèque du système       en utilisant {@link système # loadLibrary}. Si non trouvé, la bibliothèque appropriée       sera extrait du chemin de classe dans un répertoire temporaire et       chargé à partir de là.

OK, so far so good: Java tente de décompresser dans jnidispatch.dll quels que soient les points de java.io.tmpdir à. Le problème semble être que les points de java.io.tmpdir à C: \ Windows \ system32 \ config \ systemprofile \ AppData \ Local \ Temp \ pour ce processus particulier. Ce répertoire existe et système a le contrôle total. Cependant, l'extraction de la DLL jnidispatch dans ce répertoire échoue toujours. Si je modifie le code dans notre application pour écrire manuellement les fichiers à ce même répertoire, les écritures réussissent.

Je l'ai regardé le code Java et JDK pertinent et ne vois pas de mauvais comportement évident, donc je suis obligé de conclure que cela est un peu étrange bug lié Win7 UAC, mais sacrément si je peux comprendre ce qu'il est. Toutes les suggestions seront les bienvenues.

Était-ce utile?

La solution

Êtes-vous certain à 100% qu'il est en train d'écrire à l'endroit où vous pensez qu'il est en train d'écrire? Étant donné que si vous modifiez le programme pour le forcer à écrire là et cela fonctionne, il semble que vous essayez d'écrire dans un autre répertoire.

Autres conseils

Avez-vous essayé la mise java.io.tmpdir à un lieu différent, tel que discuté ici ?

L'écriture d'un fichier peut échouer pour les raisons suivantes:
1. L'autorisation utilisateur / s (héritage malmené).
2. fichier corrompu (déjà présent).
3. fichier en cours d'utilisation par une autre application en même temps.
4. fichier verrouillé par anti-malware / logiciel anti-virus.

i eu le problème. étrangement mon antivirus a détecté le fichier jndispatch.dll en tant que fichier impur et jeté à sa voûte.
peut être les fenêtres défenseur est de encastrables faire la même chose.

vérifier!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top