У меня есть программа, написанная на Java, которая изначально использовала свой каталог в Program Files для записи файлов, доступных всем пользователям этой программы. Это требовало от наших пользователей постоянной работы в качестве администратора. Чтобы облегчить эту задачу, мы решили переместить файлы, которые необходимо было записать при регулярном использовании, в папку ProgramData
с помощью переменной среды %ALLUSERSPROFILE%
. Использование подпапки в этом каталоге для нашего приложения прекрасно работает, если оно обозначено как доступное для записи во время процесса установки, что прекрасно работает при использовании NSIS.
Проблема заключается в обновлении существующих пользователей. Java File API предоставляет setWritable
, но это не работает после тестирования на машинах разработки. Похоже, что новый файловый API с Java 7 решит эту проблему, но без даты релиза я бы не стал ждать.
Кажется, самое простое решение - использовать JNA для вызова соответствующего вызова Windows API, чтобы установить этот каталог для записи. Поскольку для обновления программного обеспечения требуются права администратора, аналогичные установке, оно должно позволить этому изменению пройти нормально. Однако я не уверен, с чего начать, никогда раньше не использовал JNA или Windows API. Будем благодарны за предложения относительно того, какую библиотеку Windows загружать и какие функции вызывать, особенно если кто-то сталкивался с подобной проблемой раньше.