在Python脚本中请求UAC高程?
我希望我的Python脚本在Vista上复制文件。当我从正常的" cmd.exe"窗口运行它时,不会生成任何错误,但不会复制文件。如果我以管理员身份运行" cmd.exe",然后运行我的脚本,则可以正常运行。
这是有道理的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作。
我有没有办法从Python脚本中调用UAC提升请求(这些对话框中会说"诸如此类应用需要管理员访问权限,这样可以吗?")
如果这不可能,那么我的脚本是否可以至少检测到未提升的脚本,从而可以正常地失败?
解决方案
似乎暂时无法提升应用程序特权,以供我们执行特定任务。 Windows需要在程序开始时知道应用程序是否需要某些特权,并会要求用户确认应用程序何时执行需要这些特权的任何任务。有两种方法可以做到这一点:
- 编写清单文件,告诉Windows应用程序可能需要一些特权
- 从另一个程序内部以提升的特权运行应用程序
这两篇文章更详细地解释了它是如何工作的。
如果我们不想为CreateElevatedProcess API编写讨厌的ctypes包装器,那么我将使用代码项目文章中介绍的ShellExecuteEx技巧(Pywin32随附ShellExecute的包装器)。如何?像这样的东西:
当程序启动时,它会检查它是否具有管理员权限,如果不是,则使用ShellExecute技巧自行运行并立即退出,如果有,它将执行手头的任务。
当我们将程序描述为"脚本"时,我想这足以满足需求。
干杯。
如果脚本始终需要管理员权限,则:
runas /user:Administrator "python your_script.py"
这可能无法完全回答问题,但是我们也可以尝试使用Elevate Command Powertoy来以提升的UAC特权运行脚本。
http://technet.microsoft.com/zh-cn/magazine/2008.06.elevation.aspx
我认为,如果我们使用它,它将看起来像"提升python yourscript.py"