我在以管理员权限启动 .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)
唯一需要注意的是,这将弹出一个窗口来确认/授权更改。这对于我的用例来说是可以接受的