Сбой записи в temp dir при запуске в качестве SYSTEM на Win7 - PullRequest
3 голосов
/ 18 декабря 2009

У нас есть приложение Java, которое включает в себя компоненты, которые работают как системы на компьютерах с Windows. В Windows 7 x64 происходит сбой одного компонента при попытке распаковать библиотеку 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)

Ниже скопирован фрагмент комментариев из класса Native от jna. библиотека:

Когда классы JNA загружены, собственная общая библиотека (jnidispatch) загружен также. Предпринята попытка загрузить его из пути к системной библиотеке. используя {@link System # loadLibrary}. Если не найден, соответствующая библиотека будет извлечен из пути к классу во временный каталог и загружен оттуда.

Хорошо, пока все хорошо: Java пытается распаковать jnidispatch.dll во все, на что указывает java.io.tmpdir. Кажется, проблема в том, что java.io.tmpdir указывает на C: \ Windows \ system32 \ config \ systemprofile \ AppData \ Local \ Temp \ для этого конкретного процесса. Этот каталог существует, и СИСТЕМА имеет полный доступ. Однако извлечение библиотеки DLL jnidispatch в этот каталог всегда завершается неудачей. Если я изменю код в нашем приложении, чтобы вручную записывать файлы в этот же каталог, запись будет успешной.

Я просмотрел соответствующий код Java и JDK и не вижу явного неправильного поведения, поэтому вынужден сделать вывод, что это какая-то странная ошибка, связанная с UAC в Win7, но, черт возьми, могу ли я понять, что это является. Любые предложения будут приветствоваться.

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009

Вы на 100% уверены, что оно пишет туда, где, как вы думаете, оно пишет? Учитывая, что если вы измените программу, чтобы заставить ее писать туда, и она работает, это звучит так, как будто вы пытаетесь записать в другой каталог.

1 голос
/ 18 декабря 2009

Вы пробовали установить java.io.tmpdir в другом месте, как обсуждалось здесь ?

0 голосов
/ 27 января 2016

Запись файла может завершиться неудачей по следующим причинам:
1. разрешение пользователя / ов (наследование улажено).
2. поврежденный файл (уже имеется).
3. файл, к которому одновременно обращается другое приложение.
4. файл заблокирован антивирусом / антивирусом.

У меня была проблема. странным образом мой антивирус обнаружил файл jndispatch.dll как нечистый файл и поместил его в хранилище.
может быть, встроенный защитник Windows делает то же самое.

проверить!

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