以管理员身份通过Python运行.exe文件


4

我有一个问题,开始 .exe.exe文件作为管理员权限..

我也尝试过:

subprocess.call(['runas', '/user:Administrator', 'myfile.exe'])

但是我必须输入密码..

有没有机会把它留下来?

谢谢!

PS: 我现在搜索了几个小时......没找到任何东西!


你为什么要删除密码?
Diblo Dk

你可以用一个 stdin PIPE发送它,但是你需要以某种方式存储它以便Python脚本可访问。看起来像 proc = subprocess.call(['runas','/user:Administrator','myfile.exe'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 然后你可以做到 proc.stdin.write('password\r\n')
nerdwaller

@nerdwaller,我尝试了一段时间但没有成功。你确定这个有效吗?
McLeary

Answers:



2

这是一个小回旋,但另一种方法是运行一个shell命令,启动Powershell(随Windows一起提供),然后告诉Powershell运行 .exe 作为管理员:

(只记得shell命令在CMD中,所以你用反斜杠转义,而不是Powershell的反引号。)

Powershell command: Start-Process "executable.exe" -ArgumentList @("Arg1", "Arg2") -Verb RunAs

CMD running Powershell: Powershell -Command "& { Start-Process \"executable.exe\" ... }"

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

0

我意识到我迟到了这可能不是一个非常优雅的解决方案....但是如果你打开一个提升的命令提示符然后启动你的python脚本,那么用“subprocess.call”调用的可执行文件不会是以与CMD窗口相同的高度启动?


0

这个答案 为我工作

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)

好的解决方案我不得不添加一个 exit(0) 在最后 else 大小写,以便程序不会继续运行并运行我的其余代码。
frakman1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.