windows 在python中以管理员身份在www.example.com上运行进程subprocess.run

ckx4rj1h  于 2022-12-30  发布在  Windows
关注(0)|答案(4)|浏览(439)

在python中,有没有办法将一些runas=True参数传递给subprocess.run函数?我想以管理员身份运行一个进程(提升权限)。感谢您的回答:)
编辑:使用Windows操作系统。

pkbketx9

pkbketx91#

Windows有一个命令行实用程序“运行方式”,可用作
第一个月
进一步参考https://technet.microsoft.com/en-us/library/cc771525.aspx
您可以在下面的代码中使用它

import subprocess as sp

prog = sp.Popen(['runas', '/noprofile', '/user:Administrator', 'NeedsAdminPrivilege.exe'],stdin=sp.PIPE)
prog.stdin.write('password')
prog.communicate()
3wabscal

3wabscal2#

如果要以具有管理员权限的同一用户身份运行命令
请参考此解决方案:

os.system(r'''
Powershell -Command "& { Start-Process \"notepad.exe\"
 -ArgumentList @(\"C:\\Windows\\System32\\drivers\\etc\\hosts\")
 -Verb RunAs } " '''

原始答案可在此处找到https://superuser.com/a/753600/1088510

jmo0nnb3

jmo0nnb33#

有三种方法:
1.使用runas,如this answer所示。这种方法的缺点是使用管理员帐户,而不是当前用户的管理员权限。如果计划将软件部署到用户,这种方法效果不佳。
1.如this question中所述,使用ShellExecute启动子进程,缺点是不能使用stdin/stdout/stderr。
1.使用JetBrains的WinElevator(带签名的launcher.exe和elevator.exe可在here中获得)。这种方法的缺点是需要提供两个额外的~150kb二进制文件,优点是可以与stdin/stdout/stderr交互。

e7arh2l6

e7arh2l64#

正如其他人所建议的,你可以使用powershell来实现这一点。以下是我用来提升到管理员的PS函数:

# ========================================= Admin Rights =======================================================
# Usage: asAdmin $PSCommandPath
function asAdmin
{
    [string]$cmdPath = $args[0]
    if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit }
}

#-noexit
function asAdminWithSTA
{
    [string]$cmdPath = $args[0]
    if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-sta  -NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit }
}

相关问题