欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

python 进行安装时 runas 提权时,会弹出dos黑框,,,如何在弹出黑框时隐藏 AG chatgpt 有大用 有大大用

要隐藏 RunAsSpc.exe 执行时的 DOS 黑框,可以修改调用方式使其在后台静默运行。以下是解决方案:

修改后的安装函数(隐藏黑框)  # ok 有大用,见红色的部分

python
def 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()

关键点说明:

  1. subprocess.STARTUPINFO 结构体:

  • dwFlags |= subprocess.STARTF_USESHOWWINDOW 表示我们要控制窗口显示

  • wShowWindow = subprocess.SW_HIDE 设置窗口为隐藏模式

  • 仅管理员模式需要

    • 普通安装(非管理员)不需要特殊处理,因为大部分安装程序自身会控制窗口

    • 仅对 RunAsSpc.exe 提权时应用此配置

  • 兼容性

    • 该方法适用于 Windows 系统

    • 确保 RunAsSpc.exe 本身支持静默参数(如 /quiet

    替代方案(如果上述无效)

    如果仍看到黑框,可以尝试用以下方法包装执行:

    python
    command = ['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 进程中执行命令。


    普通分类: