在Windows 10上使用Python创建符号链接时出现权限错误

12

我正在尝试在 Windows 10(家庭版)上使用以下代码使用 Python 创建符号链接:

import ctypes

kdll = ctypes.windll.LoadLibrary("kernel32.dll")
kdll.CreateSymbolicLinkW(src_dir, dst_dir, 1)

但我收到了以下错误:

*** error: (1314, 'CreateSymbolicLink', 'A required privilege is not held by the client.')

如何解决这个问题?


1
如果UAC已启用并且您的用户是管理员,则必须提升权限(即“以管理员身份运行”)以获取具有SeCreateSymbolicLinkPrivilege的无限制管理员令牌。 - Eryk Sun
谢谢@eryksun,我确实拥有管理员权限,但您建议的操作该怎么做呢?如果您能将其作为答案提供,我将非常乐意接受。 - user308827
1
Windows-X,按A键将打开管理员命令行窗口。如果您从那里运行Python程序,它应该可以正常工作。 - Harry Johnston
我正在使用Python 2.7(因为某个库需要它)。 - user308827
1
cmd需要提升权限才能使用mklink创建符号链接,但不适用于联接--例如:subprocess.call('mklink /J "%s" "%s"' % (link, target), shell=True) - Eryk Sun
显示剩余3条评论
3个回答

15

如果启用了UAC并且你的用户是管理员,则本地安全性授权(LSA,托管在lsass.exe中)会使用受限访问令牌将您的用户登录。对于此令牌,仅使用内置的 BUILTIN\Administrators 组以拒绝访问;完整性级别标签为中等而不是高级;并且通常授予管理员的特权已被过滤。

要创建符号链接,您需要使用未受限制/提升的访问令牌创建进程(即从中等提升到高完整性级别)。右键单击并选择“以管理员身份运行”来执行此操作。此提升的令牌将被子进程继承,因此只需从提升的命令提示符中运行Python脚本即可。您可以通过使用键盘快捷方式 Win+X A 打开它。您可以通过运行whoami /priv 并检查是否存在SeCreateSymbolicLinkPrivilege 来验证cmd shell是否已提升。如果状态被禁用,请不要惊慌。Windows的CreateSymbolicLink函数会自动启用此特权。

话虽如此,既然你正在创建一个目录符号链接,那么可能一个联接也能同样地起作用。不需要特殊权限来创建联接。您可以使用cmd的mklink命令创建联接。例如:

subprocess.check_call('mklink /J "%s" "%s"' % (link, target), shell=True)

12

2

现在,创建符号链接的最简单方法是启用开发者模式。

转至设置 > 隐私和安全 > 开发人员,并将开发人员模式设为开启。立即就可以创建符号链接了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接