通过python提升用户
我想将一个zip文件解压缩到“C:\\”(仅用于测试目的)。因此我需要管理员权限,所以我尝试提升当前用户以获得管理员权限通过python提升用户,python,python-2.7,uac,Python,Python 2.7,Uac,我想将一个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:] + [ASADMI
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的调用消息正在提交,但当我想要提取zip时,仍然会收到“IOError:[Errno 13]权限被拒绝”
我做错了什么?看起来您的目标是使用新权限重新执行相同的脚本 您现在的操作方式是在一个新进程中再次执行脚本,然后检查它是否具有“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。看起来您的目标是使用新的权限重新执行相同的脚本 您现在的操作方式是在一个新进程中再次执行脚本,然后检查它是否具有“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。Hmm我像您一样更改了代码,但现在我的程序在UAC之后立即退出,退出代码为0?我不知道shell.ShellExecuteEx是否是一个阻塞调用。若它是非阻塞的,那个么您最初运行的脚本将立即退出,具有相同脚本的新进程将继续单独运行,执行main中的任何操作。请看,这个问题:嗯,我像您一样更改了代码,但现在我的程序在UAC之后立即退出,退出代码为0?我不知道shell.ShellExecuteEx是否是阻塞调用。若它是非阻塞的,那个么您最初运行的脚本将立即退出,具有相同脚本的新进程将继续单独运行,执行main中的任何操作。另见本问题: