欢迎各位兄弟 发布技术文章
这里的技术是共享的
要隐藏 RunAsSpc.exe 执行时的 DOS 黑框,可以修改调用方式使其在后台静默运行。以下是解决方案:
pythondef install_software(): print(usedbclick_execute) print(needed_admin) global downloading if usedbclick_execute: download_dir = f"C:/Users/{username}/Desktop/download_From_Self_Install" os.startfile(download_dir) downloading = 0 new_window.destroy() else: if not needed_admin: download_dir = f"C:/Users/{username}/Desktop/download_From_Self_Install" local_program_filename = f"{download_dir}" + "/" + program_url command = [local_program_filename] else: 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 # 关键修改:添加 STARTUPINFO 结构体配置 startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE # 隐藏窗口 command = [local_RunAsSpc_filename, f'/cryptfile:{local_spc_filename}', '/quiet'] try: # 执行命令时传递 startupinfo 参数 result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo if needed_admin else None) print("Output:", result.stdout.decode('utf-8', errors='ignore')) except subprocess.CalledProcessError as e: print(f"Error:", e.stderr.decode('utf-8', errors='ignore')) downloading = 0 new_window.destroy()
subprocess.STARTUPINFO 结构体:
dwFlags |= subprocess.STARTF_USESHOWWINDOW 表示我们要控制窗口显示
wShowWindow = subprocess.SW_HIDE 设置窗口为隐藏模式
仅管理员模式需要:
普通安装(非管理员)不需要特殊处理,因为大部分安装程序自身会控制窗口
仅对 RunAsSpc.exe 提权时应用此配置
兼容性:
该方法适用于 Windows 系统
确保 RunAsSpc.exe 本身支持静默参数(如 /quiet)
如果仍看到黑框,可以尝试用以下方法包装执行:
pythoncommand = ['cmd.exe', '/c', local_RunAsSpc_filename, f'/cryptfile:{local_spc_filename}', '/quiet'] startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE
这样可以强制在隐藏的 cmd 进程中执行命令。