为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建符号链接

如何创建符号链接

慕尼黑的夜晚无繁华 2022-06-04 16:28:41
在启用开发人员模式的 Windows 10 版本 1803 build 17134.523 上的 NTFS 卷上,我有一个文件myfile. 我可以使用mklink. 但是,如果我调用Files.createSymbolicLinkjava jre 1.8.0_201,如果抛出:java.nio.file.FileSystemException: linkname: A required privilege is not held by the client.    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)    at sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(Unknown Source)    at java.nio.file.Files.createSymbolicLink(Unknown Source)    at CreateLinks.main(CreateLinks.java:15)在带有 jre 的 Windows 子系统 Linux (WSL) 上同样有效1.8.0_191-8u191-b12-0ubuntu0.18.10.1-b12如何在不进入 WSL 的情况下在 Windows 上进行这项工作?这个异常到底是在哪里抛出的?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

创建符号链接需要 SeCreateSymbolicLinkPrivilege,除非系统处于开发者模式并且使用标志(*)CreateSymbolicLink调用WinAPI。SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATECMD 的mklink命令在 Windows 10 中使用此标志。显然 Java JRE 版本 1.8.0_201 没有。

对于 WSL,它继承了运行它的安全上下文。如果从具有 SeCreateSymbolicLinkPrivilege 的登录运行,最新版本的 WSL 将在 drvfs(例如 NTFS)卷上创建正常的 Windows 符号链接。否则,WSL 使用自定义符号链接类型,该类型基于IO_REPARSE_TAG_LX_SYMLINK(0xA000001D) 重解析点,而不是正常的IO_REPARSE_TAG_SYMLINK(0xA000000C) 重解析点。您可以通过命令查询重解析点的类型fsutil reparsepoint query <filename>


(*) 文档说“[s]指定此标志以允许在进程未提升时创建符号链接”。更准确地说,此标志允许在没有 SeCreateSymbolicLinkPrivilege 的情况下创建符号链接,这仅与使用默认系统设置“提升”有关。就个人而言,我将此权限授予“经过身份验证的用户”组,在这种情况下,创建符号链接不需要提升到完全管理员访问权限。


查看完整回答
反对 回复 2022-06-04
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

它与您的 Java 无关,仅与您的操作系统有关。请参阅以下链接: 如何使用 java.nio.Files 创建软符号链接

关闭 UAC 的 Win10 - 我必须设置本地策略 > 安全选项 > 用户帐户控制:在管理员批准模式下运行所有管理员 = 已禁用 - 否则 - 相同的 FileSystemException:客户端不持有所需的权限


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 238 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信