当前位置: 首页 > 面试题库 >

在Python脚本中请求UAC高程?

郜修雅
2023-03-14
问题内容

我希望我的Python脚本在Vista上复制文件。当我从普通cmd.exe窗口运行它时,不会生成任何错误,但不会复制文件。如果我以cmd.exe“管理员身份”运行,然后运行我的脚本,则可以正常运行。

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

我有没有办法从Python脚本中调用UAC提升请求(这些对话框中会说“诸如此类应用需要管理员访问权限,这样可以吗?”)

如果这不可能,那么我的脚本是否可以至少检测到未提升的脚本,从而可以正常地失败?


问题答案:
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)

如果你使用的是Python 2.x,则应将最后一行替换为:

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

还要注意的是,如果你转换你的Python脚本到一个可执行文件(使用工具,如py2exe,cx_freeze,pyinstaller),那么你应该更换第四个参数为空字符串(”“)。

这里的一些优点是:

  • 不需要外部库(也不需要Python用于Windows扩展)。它仅从ctypes标准库使用。
  • 适用于Python 2和Python 3。
  • 无需修改文件资源或创建清单文件。
  • 如果你不在if / else语句下添加代码,则该代码将永远不会执行两次。
  • 如果用户拒绝UAC提示,则可以轻松地将其修改为特殊行为。
  • 你可以指定参数来修改第四个参数。
  • 你可以指定修改第六个参数的显示方法


 类似资料:
  • 我有一个对服务器的Authenticate post调用,如下所示: 用这样的尸体: 我总是必须在Postman中执行两次这个Authenticate调用,以正确填充我的全局var“安全令牌”,并在此后的下一次调用中使用该令牌进行身份验证,因此,似乎预请求脚本实际上是在脚本之后运行的,或者是预请求脚本中设置的全局var对当前请求不容易可用? 我做错了什么? 以下是预先请求的SRIPT:

  • 问题内容: 如果PHP引擎已经在服务器上执行脚本的过程中,其他同时向同一脚本发出的浏览器请求又会如何? 请求会排队吗? 他们会被忽略吗? 每个请求都会有自己的脚本实例吗? 还有其他可能性吗? 问题答案: 根据服务器的配置,服务器通常可以同时处理 数百个请求 -如果使用Apache,则 配置选项就是这样: 该指令设置了将同时服务的请求数的限制。 任何超出 限制的连接尝试 通常都会排队,最多可以排队一

  • 问题内容: 我正在处理用户脚本,但我发现当主页发出AJAX请求时,该脚本未运行。 有什么方法可以在主页加载和AJAX请求上触发用户脚本? 问题答案: 在AJAX请求上重新运行脚本代码的明智方法是,专注于页面的关键部分并检查更改。 例如,假设页面包含如下所示的HTML: 并且您希望脚本对每个注释进行处理。 现在,您 可以 拦截所有AJAX调用, 或者侦听 (不建议使用)或使用s,但是这些方法可能会变

  • 如何调用POST API请求(具有用户名请求主体的登录API 登录API:POST方法;请求正文:用户名和密码;响应正文:令牌。获取客户记录API:GET方法;请求URI: /token/ 只想在邮递员的一个测试中涵盖这种端到端场景。任何人都可以帮我提供预请求脚本吗?我应该如何调用登录 API?

  • 我从项目中的脚本执行一个脚本。 该脚本中还有另一个循环,即执行请求。之后,应该执行另外两个脚本来处理输出。这些在请求步骤之后的相同testcase中,但不会自动执行。

  • 问题内容: 我可以使用Groovy脚本获取响应xml。我需要获取请求XML,因为我需要在soap ui测试中添加“断言脚本”。 我正在使用以下代码来获取响应xml 但是我不确定如何获取SOAPUI的请求xml。谁能帮我获得SOPAUI的请求xml吗? 问题答案: 要以字符串形式获取请求内容,可以使用 有关SoapUI API的更多信息,请访问http://www.soapui.org/apidoc