这段代码旨在供计算机的非管理员用户使用,以便他们可以作为管理员运行任务或应用程序。因此,我创建了一个管理员用户,我将使用它来启动应用程序(带路径)。
当我尝试使用另一个用户的Runas命令启动应用程序时,出现了问题。
该命令需要输入用户的密码。
因此,我尝试使用:
import subprocess as sub
prog = sub.Popen(['runas', '/noprofile', '/user:kairos', path/of/app],shell=True, stdin=sub.PIPE, stdout=sub.PIPE)
prog.communicate(input=password.encode())
但什么也没发生。 另一种方法是使用具有凭据的“Start-Process” Powershell 命令。
import subprocess as sub
command = """
$username = 'kairos'
$password = 'password'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process "path\to\app" -Credential $credential
"""
exec = sub.Popen(["powershell","& {" + command + "}"], stdout=sub.PIPE)
exec.communicate()
尽管我是计算机的本地管理员,但此命令返回“访问被拒绝”。
我还尝试使用此命令,但被用户账户控制(UAC)卡住了。
ctypes.windll.shell32.ShellExecuteW(None, "runas", "path\to\app")
有什么想法吗?