Python 实现程序自动以管理员权限运行的方法

这篇具有很好参考价值的文章主要介绍了Python 实现程序自动以管理员权限运行的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于Windows的安全机制,Python写的脚本缺少了管理员权限,运行就会受到一些限制。
文章介绍Python 脚本自动以管理员权限运行的方法,
也就是如果脚本不是以管理员运行,就自动提升到管理员权限。

核心API函数

将python提升到管理员权限运行需要调用ShellExecute这个API函数。
ShellExecute函数的用法如下(这里仅作了解 ):

ShellExecute(hWnd,Operation,FileName,Parameters,Directory,ShowCmd)
hWnd: 整数 (指定父窗口句柄,如果没有可用None代替)
Operation: 字符串 (指定动作, 譬如: open、runas、print、edit、explore、find)
FileName: 字符串 (指定要打开的文件或程序)
Parameters: 字符串 (给要打开的程序指定参数)
Directory: 字符串 (缺省目录)
ShowCmd: 整数 (程序启动后的窗口显示方式,
正常为1、最小化为2、最大化为3)

代码实现(1)

使用Python自带的ctypes模块,调用API函数的代码:

import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    # 主程序写在这里
else:
    # 以管理员权限重新运行程序
    ctypes.windll.shell32.ShellExecuteW(None,"runas", sys.executable, __file__, None, 1)

如果是Python 2,把最后一行改成这样:

ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

如果使用pyinstaller等库打包python程序,则应将ShellExecuteW的第四个参数替换为""

另外,在ShellExecuteW的第4个参数中可加入其他的命令行参数,
在第6个参数中可指定窗口显示方式,如最小化(为2)、最大化(为3)等。

本方法优点:

  • 不需要外部库,仅使用自带的ctypes模块。
  • 适用于Python 2和Python 3。

本方法缺点:

在命令行窗口(cmd)中运行python时,会另外打开一个命令行窗口,造成输出的消息一闪而过。
(不过,据了解这似乎是Windows自身的安全机制造成的,而不是程序的bug,可能是用于防止漏洞)

代码实现(2)

相比于Python自带的ctypes库,win32api库更加广为人知、使用方便。
使用pip的安装方法:pip install pywin32
使用win32api模块的代码:

import sys, os, win32api

def is_admin():
    # 由于win32api中没有IsUserAnAdmin函数,所以用了这种方法
    try:
        # 在c:\windows目录下新建一个文件test01.txt
        testfile=os.path.join(os.getenv("windir"),"test01.txt")
        open(testfile,"w").close()
    except OSError: # 不成功
        return False
    else: # 成功
        os.remove(testfile) # 删除文件
        return True

print(is_admin())
if is_admin():
    # 主程序写在这里
else:
    # 以管理员权限重新运行程序
    win32api.ShellExecute(None,"runas", sys.executable, __file__, None, 1)

如果是Python 2,将except OSError这一行改为except IOError
本方法优点:

  • 适用于Python 2和Python 3。

如果读者有更好的实现程序自动以管理员权限运行的方法,欢迎在评论区补充!点赞收藏文章来源地址https://www.toymoban.com/news/detail-651162.html

到了这里,关于Python 实现程序自动以管理员权限运行的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows开发:服务程序启动有管理员权限的界面程序

    本章介绍Windows桌面开发中,服务程序如何启动有管理员权限的界面进程。 在这种情况下,以下几点需要弄清楚: Windows的服务是什么 Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自

    2024年02月11日
    浏览(48)
  • unity 以管理员权限运行 与 无法读取D3DCompiler DLL文件 解决方案

    在unity hub下载后,用编辑器无法打开项目,可能出现的问题。   Unity 以管理员权限运行,这不受支持。Unity在您的项目中执行脚本和二进制库,这些脚本和二进制库可能来自第三方来源,并可能对您的计算机有害。Unity 还可以执行仍在开发中且尚未完全测试的脚本和二进制库

    2024年04月13日
    浏览(35)
  • C#实现软件开机自启动(不需要管理员权限)

    目录 原理简介 使用方法 完整代码 本文参考C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法,将里面中的第一种方法做了封装成 AutoStart 类,使用时直接两三行代码就可以搞定。 自启动的原理是 将软件的快捷方式创建到计算机的自动启动目录下(不需要管理员权限)

    2024年02月11日
    浏览(42)
  • 搞懂.NET应用程序管理员权限:三种简单方法一网打尽

      概述: .NET应用程序以管理员身份运行的方法包括修改清单文件、项目文件,或在运行时动态请求管理员权限。清单文件和项目文件通过声明UAC请求,而动态请求管理员权限则在程序启动时检查并重新启动。选择适当的方法取决于项目需求和配置。 在.NET应用程序中强制以管

    2024年03月19日
    浏览(44)
  • 利用Python和Selenium编程,实现定时自动检索特定网页,发现特定网页内容发生变化后,向管理员发送提醒邮件(一)

            要求爬取某单位网站,登录后台查看是否有新增“网友提问”,如果有新的提问,向特定邮箱发出提醒邮件。 首先查看该网站的robots.txt文件,发现不存在该文件,由于未禁止,可用爬取取相关信息。 查看是否有网友提问的操作流程如下。 1、登录网站后台管理页面

    2024年02月17日
    浏览(58)
  • 实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能

    本文实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能。 以挂载vhd虚拟盘、卸载vhd虚拟盘为例。 一、挂载vhd虚拟盘 C#工程 vhdAttach, 生成vhdAttach.exe,vhdAttach.exe的功能为:启动windows终端cmd.exe,读取attach-vhd.txt中的内容,并在终端里执行attach-vhd.txt中的多条指令

    2024年02月10日
    浏览(39)
  • 已使用管理员权限运行CMD,仍报错OSError: [WinError 5] 拒绝访问。: ‘E:\\Code\\Python\\Git\\stable-diffusion-webui\\venv\\

    Windows10 教育版64位 Python 3.6.3 Tensorflow-GPU 2.3.0 Keras 2.4.3 CUDA 10.1 今天需要安装一个包,然后这个软件包需要更新 opencv ,然后就报错: 即: 文中有报错: check the permissions ,明显是说权限不够,可是我本来就是用 管理员权限 运行的 CMD ,而且 CMD 上面也能清晰看到管理员的字样

    2024年02月09日
    浏览(34)
  • win11设置管理员权限

     

    2024年02月14日
    浏览(45)
  • git bash开通默认管理员权限

    问题: 配置好git ssh的key连接后 运行 报错 后来发现是没有在管理员权限下打开git bash 但是管理员权限只能去快捷方式里右键打开 但是希望在文件夹里右键自带的git bash也能带管理员权限,只需要找到git安装路径下的git-bash.exe 就可以了,其他应用都同理。

    2024年02月08日
    浏览(45)
  • 强大的bat病毒(拿管理员权限)

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包