import ctypes, sys
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# Code of your program here
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
我花了一点时间才让dguaraglia的答案生效,所以为了节省其他人的时间,下面是我为实现这个想法所做的:
截至2017年,实现这一目标的简单方法如下:
如果使用的是Python2.x,则应将最后一行替换为:
还要注意,如果您将python脚本转换为可执行文件(使用诸如
py2exe
、cx_freeze
、pyinstaller
之类的工具),那么您应该替换空字符串(""
)的第四个参数。这里的一些优点是:
ctypes
。底层ShellExecute调用的文档是here。
似乎暂时无法提升应用程序权限以执行特定任务。Windows需要在程序启动时知道应用程序是否需要某些特权,并要求用户确认应用程序何时执行任何需要这些特权的任务。有两种方法:
这个twoarticles更详细地解释了这是如何工作的。
如果您不想为createElevatedProcessAPI编写一个讨厌的ctypes包装器,我要做的是使用代码项目文章中解释的ShellExecuteEx技巧(Pywin32附带了ShellExecute的包装器)。怎样?像这样的:
当程序启动时,它会检查它是否具有管理员权限,如果没有,它会使用ShellExecute技巧运行自己并立即退出,如果有,它将执行手头的任务。
当你把你的程序描述为“脚本”时,我想这已经足够满足你的需要了。
干杯。
相关问题 更多 >
编程相关推荐