从Python脚本中请求UAC提升?

从Python脚本中请求UAC提升?

我希望我的Python脚本在Vista上复制文件。当我从正常人那里运行时cmd.exe窗口中,不会生成错误,但文件不会被复制。如果我跑cmd.exe“作为管理员”,然后运行我的脚本,它工作得很好。

这是有意义的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作。

有没有办法,从Python脚本中调用UAC提升请求(那些对话框中写着“这样的应用程序需要管理访问,这可以吗?”)

如果这是不可能的,那么我的脚本是否至少可以检测到它没有被提升,这样它就可以优雅地失败?


胡说叔叔
浏览 1413回答 3
3回答

红糖糍粑

实现这一目标的简单方法如下:import ctypes, sysdef is_admin():     try:         return ctypes.windll.shell32.IsUserAnAdmin()     except:         return Falseif is_admin():     # Code of your program hereelse:     # Re-run the program with admin rights     ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)如果您使用的是Python2.x,那么您应该将最后一行替换为:ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)还请注意,如果您将python脚本转换为可执行文件(使用以下工具)py2exe, cx_freeze, pyinstaller)然后,应该将第四个参数替换为空字符串("").这里的一些优点是:不需要外部库(Windows扩展也不需要Python)。它只使用ctypes从标准图书馆。同时工作在Python 2和Python 3上。不需要修改文件资源,也不需要创建清单文件。如果不在if/etc语句下面添加代码,则代码将不会执行两次。如果用户拒绝UAC提示,您可以很容易地将其修改为具有特殊行为。您可以指定修改第四个参数的参数。您可以指定修改第六个参数的显示方法。基础ShellExecute调用的文档是这里.

吃鸡游戏

在一段时间内,您似乎无法提高应用程序特权来执行特定的任务。Windows需要在程序开始时知道应用程序是否需要某些特权,并将要求用户在应用程序执行以下任务时确认需要那些特权。有两种方法可以做到这一点:编写一个清单文件,告诉Windows应用程序可能需要一些特权在另一个程序中以提升的权限运行应用程序这,这个二 文章更详细地解释这是如何工作的。如果您不想为Create11-Process API编写一个讨厌的ctype包装器,我会做的是使用代码项目文章中解释的ShellExecuteEx技巧(Pywin 32附带了一个ShellExecute的包装器)。多么,怎样?就像这样:当程序启动时,它会检查它是否具有管理员权限,如果没有,它使用ShellExecute技巧运行自己,并立即退出,如果有,它将执行手头的任务。当您将您的程序描述为“脚本”时,我想这足以满足您的需要。干杯。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python