欢迎各位兄弟 发布技术文章
这里的技术是共享的
#个函数的目的是为了创建一个 essj 的帐号
def _download_install_prepare():
# 下载 RunAsSpc.exe
download_dir = f"C:/Users/{username}/Desktop/download_From_Self_Install"
if not os.path.exists(download_dir):
os.makedirs(download_dir)
local_RunAsSpc_filename = f"{download_dir}" + "/" + "RunAsSpc.exe"
web_RunAsSpc_url = url_root + "/" + "RunAsSpc.exe" # 下载RunAsSpc
download_file(web_RunAsSpc_url, local_RunAsSpc_filename)
# 下载 self_installation_prepare.spc 这个加密文件是为了 创建一个 essj 的帐号
spc_url = "self_installation_prepare.spc"
local_spc_filename = f"{download_dir}" + "/" + spc_url
web_spc_url = url_root + "/" + spc_url # 下载RunAsSpcAdmin
download_file(web_spc_url, local_spc_filename)
# 下载 self_installation_prepare.bat 这个bat文件是为了 创建一个 essj 的帐号
bat_url = "self_installation_prepare.bat"
local_bat_filename = f"{download_dir}" + "/" + bat_url
web_bat_url = url_root + "/" + bat_url # 下载RunAsSpcAdmin
download_file(web_bat_url, local_bat_filename)
download_dir = f"C:/Users/{username}/Desktop/download_From_Self_Install"
local_RunAsSpc_filename = f"{download_dir}" + "/" + "RunAsSpc.exe"
local_spc_filename = f"{download_dir}" + "/" + spc_url
# local_spc_filename = local_spc_filename.encode('gb2312', errors='ignore')
# print("AAA")
# print(local_spc_filename)
# 隐藏dos黑框黑窗口 关键修改:添加 STARTUPINFO 结构体配置
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE # 隐藏窗口
command = [
f"{local_RunAsSpc_filename}",
f'/cryptfile:{local_spc_filename}', # 确保反斜杠被正确转义
'/quiet' # 如果有问题的话,就注释掉它,会报错,可以查出错误的原因
]
try:
# 执行命令
# result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
startupinfo=startupinfo)
# 打印标准输出和错误输出
# print("Output:", result.stdout.decode())
# print("Error:", result.stderr.decode())
print("Output:", result.stdout.decode('utf-8', errors='ignore'))
print("Output:", result.stderr.decode('utf-8', errors='ignore'))
# print(command)
except subprocess.CalledProcessError as e:
print(f"An error occurred while executing the command: {e}")
# print("Output:", e.stdout.decode())
# print("Error:", e.stderr.decode())
print("Output:", e.stdout.decode('utf-8', errors='ignore'))
print("Error:", e.stderr.decode('utf-8', errors='ignore'))
AG 这个命令 是执行 RunAsSpc.exe ,,,,,,RunAsSpc.exe执行的加密文件 dos 命令的文件内容 是 "ping www.baidu.com" 会弹出黑窗口 ,如何把 dos 命令的黑窗口 隐藏或最小化
我自己亲自做的 隐藏黑窗口的方法:
1)上面的subprocess.run代码改成如下
2)dos 文件 的内容改成是
cmd.exe /c start "" /min cmd /c "ping www.baidu.com"
或者 ( cmd.exe /c start "" /min cmd /c "ping www.baidu.com >nul 2>&1" )
只要做到上面这两点就可以了
下面的可以不看,只是为了理解
你的代码已经在使用 subprocess.STARTUPINFO 隐藏窗口(通过 startupinfo.wShowWindow = subprocess.SW_HIDE),但如果 RunAsSpc.exe 内部仍弹出黑窗口,可能是因为:
RunAsSpc.exe 自身在内部调用了 cmd(比如执行 ping 时未继承隐藏设置)
或者它显式创建了新控制台窗口
RunAsSpc.exe 的 子进程窗口 (修改 SPC 文件)如果 SPC 内容是 ping www.baidu.com,将其改成:
plaintext%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -Command "ping www.baidu.com"
self_installation_prepare.bat(如果允许)在 .bat 文件首行添加:
batch@echo off if "%1"=="hide" goto :run_hidden start /min "" "%~f0" hide & exit :run_hidden REM 你的实际命令(如 ping) ping www.baidu.com
RunAsSpc.exe
pythondef _download_install_prepare(): download_dir = f"C:/Users/{username}/Desktop/download_From_Self_Install" os.makedirs(download_dir, exist_ok=True) # 直接用 PowerShell 执行 ping(无窗口) ps_command = 'ping www.baidu.com' subprocess.run( ['powershell', '-WindowStyle', 'Hidden', '-Command', ps_command], stdout=subprocess.PIPE, stderr=subprocess.PIPE )
如果 RunAsSpc.exe 必须保留,尝试用 CREATE_NO_WINDOW(仅 Windows):
pythoncommand = [local_RunAsSpc_filename, '/cryptfile:' + local_spc_filename, '/quiet'] subprocess.run( command, creationflags=subprocess.CREATE_NO_WINDOW, # 关键!阻止子进程窗口 stdout=subprocess.PIPE, stderr=subprocess.PIPE )
检查 SPC 文件内容
确认 self_installation_prepare.spc 是否直接调用 cmd,改用 powershell -WindowStyle Hidden 绕开。
捕获 RunAsSpc.exe 的调试输出
临时移除 /quiet 参数,查看完整错误信息:
pythonsubprocess.run(command, stderr=subprocess.PIPE, text=True)
权限问题RunAsSpc.exe 需要管理员权限时,尝试:
pythonsubprocess.run(command, shell=True, startupinfo=startupinfo)
如果 RunAsSpc.exe 是第三方工具,可能无法彻底隐藏窗口(内部硬编码了窗口创建)。
路径中的反斜杠 建议用 / 或 os.path.join() 避免转义问题。
chatgpt 这个命令 是执行 RunAsSpc.exe ,,,,,,RunAsSpc.exe执行的加密文件 dos 命令 是 "ping www.baidu.com" 会弹出黑窗口 ,如何把 dos 命令的黑窗口 隐藏或最小化
下面是重点:
你隐藏了 Python 里的 subprocess 黑窗口,但是 RunAsSpc.exe 内部执行的 DOS 命令(比如 ping www.baidu.com)依旧会弹出黑窗口。
原因是:
✔ RunAsSpc.exe 会调用 cmd.exe /c ... 来执行加密文件里的命令
✘ 而它不会继承你 Python 的 STARTUPINFO / CREATE_NO_WINDOW 设置
✘ 所以 cmd 黑窗口还是会弹出
你的 SPC 文件里原本命令可能是:
改成:
或彻底隐藏:
✔ /min = 最小化
✔ /b = 不创建新窗口(隐藏执行)
把 SPC 文件里的命令改成:
✔ 完全无窗口
✔ PowerShell 本身提供 Hidden 窗口模式
✔ 兼容性强
SPC 文件内的命令写成:
✔ 强制隐藏
✔ 不会再出现黑窗口
✔ 任何 DOS 命令都可以这样包起来执行
你 Python 代码设置的隐藏只对 RunAsSpc.exe 生效
但 RunAsSpc.exe 里面调用的 CMD 完全不受控 → 会继续弹窗
完全隐藏窗口的 SPC 加密命令格式
自动生成隐藏执行的 bat 文件模板
RunAsSpc.exe 运行记录日志的方法
你只需要告诉我:
📌 SPC文件内部原始命令内容(例如 “ping www.baidu.com”)
我帮你改成 100% 隐藏窗口版本。
cmd.exe /c start "" /min ping www.baidu.com 详解