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

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

我在以管理员权限启动 .exe 文件时遇到问题.exe

我也尝试过:

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

但我必须输入密码......

有没有可能把它省略掉?

谢谢!

附言:我已经搜索了几个小时...没有找到任何东西!

答案1

答案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 } " '''

答案3

这个答案为我工作

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)

答案4

我也深入研究了这个兔子洞,并找到了一个对我有用的解决方案:PowerShell。我的目标是从 python 更改接口的 IP,以下是代码:

更改IP地址

@echo on
setlocal

SET INTRF="Ethernet %1%"
SET IP_ADDR=%2%
SET SUBNET=255.255.255.0
SET GATEWAY=0.0.0.0

netsh interface ipv4 set address name=%INTRF% static %IP_ADDR% %SUBNET% %GATEWAY%

endlocal

ip_changer.py

import os
import subprocess

_bat_file_path = os.path.join(os.path.dirname(os.getcwd()), 'change_ip_win.bat')      # assumes .bat is in same path as this .py file
_eth_interface = str(interface_num)
_new_ip = str(ip_addr)
subprocess.check_output("Powershell -Command \"Start-Process " + _bat_file_path + " -ArgumentList \'"+ _eth_interface +"," + _new_ip +"\' -Verb RunAs\"", shell=True)

唯一需要注意的是,这将弹出一个窗口来确认/授权更改。这对于我的用例来说是可以接受的

相关内容