Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过python提升用户_Python_Python 2.7_Uac - Fatal编程技术网

通过python提升用户

通过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

我想将一个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的调用消息正在提交,但当我想要提取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中的任何操作。另见本问题: