获取 FileSystemException “客户端未持有所需的特权”,使用 Files.createSymbolicLink 在 Play Framework 中使用

2022-09-02 01:35:14

我正在尝试在Play中使用新的Java 7 Files.createSymbolicLink()方法!框架,我得到了以下异常:

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。

From AccessDeniedException:

当文件系统操作被拒绝时引发的 check 异常,通常是由于文件权限或其他访问检查。此异常与访问控制器或安全管理器在文件访问被拒绝时引发的 AccessControlException 或 SecurityException 无关。


答案 2

看到这个答案,并记住我在Windows 7上运行UAC之后,我知道这是一个Windows问题。

  1. 在Java内部无法做任何事情来消除这种情况。
  2. 我应该能够以某种方式专门关闭UAC for Play(以管理员身份运行等),但这个问题与Play(或java权限)根本不相关。

实际上,在运行时:

runas /noprofile /user:Administrator cmd
cd c:\myapp
play run

一切都很好。


推荐