我想将zip存档解压缩到“C:\\”(仅用于测试目的)。因此我需要管理员权限,所以我试图提升当前用户以获得管理员权限。
if __name__ == "__main__":
ASADMIN = 'asadmin'
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
main()
来自UAC的调用消息正在应用,但是当我想解压缩时,我仍然会收到“IOError:[Errno 13] Permission denied”。
我在这里做错了什么?
答案 0 :(得分:2)
您的目标似乎是使用新权限重新执行相同的脚本。
你现在这样做的方式现在在一个新进程中再次执行脚本,然后检查它是否有" asadmin"旗帜,并立即退出,因为那里没有别的事情可做。然后原始进程(没有提升权限)执行main。
您可能希望将main
的调用放在else
块中,以便仅在asadmin
设置时执行:
if __name__ == "__main__":
ASADMIN = 'asadmin'
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
else:
main()
此外,您可能希望找到更好的方法来执行权限检查。如果您以管理员身份运行此脚本,仍然需要重新执行自身才能设置" asadmin"旗。如果您以普通用户身份运行并设置" asadmin"手动,脚本不起作用。这可能是某个地方的API。