Получение FileSystemException "Необходимая привилегия не удерживается клиентом", используя Files.createSymbolicLink в Play Framework
Я пытаюсь использовать новый метод Java 7 Files.createSymbolicLink() в Play! Framework, и я получил следующее исключение:
RuntimeException occured : java.nio.file.FileSystemException: c:\work\foo\bar:
A required privilege is not held by the client.
Это моя первая встреча с моделью разрешений Java, поэтому я понимаю, что происходит, но еще не знаю, как ее исправить (я бы хотел предоставить контроллерам больше разрешений).
Если кто-то может ответить здесь быстрее, чем я найду ответ, я (и будущие читатели) будет благодарен.
Ответы
Ответ 1
Это не проблема с разрешениями Java, но проблема с разрешениями операционной системы. См. FileSystemException.
Подклассы FileSystemException: AccessDeniedException, AtomicMoveNotSupportedException, DirectoryNotEmptyException, FileAlreadyExistsException, FileSystemLoopException, NoSuchFileException, NotDirectoryException, NotLinkException.
Из AccessDeniedException:
Проверено исключение, возникшее при отказе в работе файловой системы, обычно из-за разрешения файла или другой проверки доступа.
Это исключение не связано с AccessControlException или SecurityException, созданным контроллерами доступа или менеджерами безопасности, когда доступ к файлу запрещен.
Ответ 2
После просмотра этого ответа и помня, что я запускаю Windows 7 с UAC Я понимаю, что это проблема Windows.
- Ничто не может быть сделано из Java, чтобы это ушло.
- Я должен как-то отключить UAC для Play (запустить как admin и т.д.), но вопрос не связан с Play (или java-разрешениями) вообще.
Действительно, при запуске:
runas /noprofile /user:Administrator cmd
cd c:\myapp
play run
все работает хорошо.