通过python提升用户

时间:2017-02-10 19:56:43

标签: 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:] + [ASADMIN])
        shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
        main()

来自UAC的调用消息正在应用,但是当我想解压缩时,我仍然会收到“IOError:[Errno 13] Permission denied”。

我在这里做错了什么?

1 个答案:

答案 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。