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

这里的技术是共享的

You are here

这个命令 是执行 RunAsSpc.exe ,,,,,,RunAsSpc.exe执行的加密文件 dos 命令的文件内容 是 "ping www.baidu.com" 会弹出黑窗口 ,如何把 dos 命令的黑窗口 隐藏或最小化 AG chatgpt 有大用 有大大用

#个函数的目的是为了创建一个 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代码改成如下

 # 执行命令
        # result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                creationflags=subprocess.CREATE_NO_WINDOW,
                                startupinfo=startupinfo)

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 内部仍弹出黑窗口,可能是因为:

  1. RunAsSpc.exe 自身在内部调用了 cmd(比如执行 ping 时未继承隐藏设置)

  2. 或者它显式创建了新控制台窗口


✅ 解决方案(4 种方法)

方法 1:强制隐藏 RunAsSpc.exe 的 子进程窗口 (修改 SPC 文件)

如果 SPC 内容是 ping www.baidu.com,将其改成:

plaintext    
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -Command "ping www.baidu.com"    


方法 2:修改 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    


方法 3:Python 直接调用 PowerShell 替代 RunAsSpc.exe

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


方法 4:终极方案(API 级隐藏) # OK 有大用 

如果 RunAsSpc.exe 必须保留,尝试用 CREATE_NO_WINDOW(仅 Windows):

python    
command = [local_RunAsSpc_filename, '/cryptfile:' + local_spc_filename, '/quiet'] subprocess.run(    command,    creationflags=subprocess.CREATE_NO_WINDOW,  # 关键!阻止子进程窗口    stdout=subprocess.PIPE,    stderr=subprocess.PIPE )    



? 排查建议

  1. 检查 SPC 文件内容
    确认 self_installation_prepare.spc 是否直接调用 cmd,改用 powershell -WindowStyle Hidden 绕开。

  2. 捕获 RunAsSpc.exe 的调试输出
    临时移除 /quiet 参数,查看完整错误信息:

    python            
    subprocess.run(command, stderr=subprocess.PIPE, text=True)            

       

  3. 权限问题
    RunAsSpc.exe 需要管理员权限时,尝试:

    python            
    subprocess.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 黑窗口还是会弹出


✅ 解决方法:把加密文件里的命令改成 隐藏执行 cmd

你的 SPC 文件里原本命令可能是:

ping www.baidu.com    



改成:

cmd.exe /c start "" /min ping www.baidu.com     # OK 有大用    



或彻底隐藏:

cmd.exe /c start "" /b ping www.baidu.com    # NG    



/min = 最小化
/b = 不创建新窗口(隐藏执行)


📌 更彻底:强制隐藏 cmd 窗口(最推荐)

把 SPC 文件里的命令改成:

cmd.exe /c powershell -WindowStyle Hidden -Command "ping www.baidu.com"    



完全无窗口
✔ PowerShell 本身提供 Hidden 窗口模式
✔ 兼容性强


📌 推荐最终写法(完全隐藏 + 最安全)

SPC 文件内的命令写成:

powershell -WindowStyle Hidden -Command "Start-Process ping -ArgumentList 'www.baidu.com' -WindowStyle Hidden"    



✔ 强制隐藏
✔ 不会再出现黑窗口
✔ 任何 DOS 命令都可以这样包起来执行


❗关键点总结

RunAsSpc.exe 无法帮你隐藏内部执行的 cmd

你 Python 代码设置的隐藏只对 RunAsSpc.exe 生效
但 RunAsSpc.exe 里面调用的 CMD 完全不受控 → 会继续弹窗

唯一办法:修改 SPC 文件中的命令,让它自己隐藏窗口


如果你希望我帮你生成:

  • 完全隐藏窗口的 SPC 加密命令格式

  • 自动生成隐藏执行的 bat 文件模板

  • RunAsSpc.exe 运行记录日志的方法

你只需要告诉我:
📌 SPC文件内部原始命令内容(例如 “ping www.baidu.com”)

我帮你改成 100% 隐藏窗口版本


cmd.exe /c start "" /min ping www.baidu.com 详解

逐段详解:cmd.exe /c start "" /min ping www.baidu.com            

我把整条命令拆开、解释每一部分的语义、行为、常见坑和替代做法 — 包括如何最小化真正隐藏窗口的区别。


1) cmd.exe /c            

  • cmd.exe:调用 Windows 命令解释器(Command Prompt)。

  • /c:执行后面的命令字符串,然后 终止 cmd(exit)。
    示例:cmd.exe /c dir 会执行 dir,执行完成后 cmd 退出。


2) start            

  • startcmd 内建命令,用来 在新窗口中 启动程序或命令,也可以设置窗口标题、最小化/最大化、工作目录等。

  • 基本语法(简化版):

    START ["title"] [/D path] [options] command [arguments]                        

                       


                       

  • 重要:如果第一个参数是带引号的字符串,start 会把它当作 窗口标题
    所以如果你要启动的命令本身带引号(路径含空格),必须显式提供一个标题(常用空字符串 "")。


3) ""            

  • 这是传给 start空标题

  • 必须写,否则如果下一个参数是带引号的路径或程序名,start 会误把它当标题,从而不执行你想运行的程序

  • 常见用法:start "" somecommand —— 表示“窗口标题为空,接着运行 somecommand”。


4) /min            

  • start 的一个选项,表示 以最小化(minimized)窗口 启动目标程序。

  • 效果:会打开一个新的命令窗口(或程序窗口),但它最小化到任务栏而不是直接弹到前台。

  • 注意:仍会创建窗口(只是最小化),用户仍能在任务栏看到窗口图标/还原它。


5) ping www.baidu.com            

  • 要被 start 启动执行的命令(这里是 ping)。

  • start 会在新的最小化窗口里运行 ping


总结行为

  • cmd.exe /c start "" /min ping www.baidu.com 会:

  1. 启动一个 cmd 来执行 start(这个 cmd 执行完 start 即退出,因为用了 /c)。

  2. start 创建一个 新的 cmd 窗口,在该窗口中运行 ping www.baidu.com,并把这个新窗口 以最小化方式显示(在任务栏可见)。

  • 因此你会看到任务栏上有一个最小化的命令窗口(不会弹到前台),但并非完全隐藏


  • 常见坑 & 注意事项

    1. 如果你想完全不创建窗口(后台静默执行),/min 不够——它只是最小化,不是隐藏。

    2. start /b:不创建新窗口(在当前控制台内运行),但如果调用方没有控制台(例如 GUI 程序或通过某些桥接运行),/b 可能无法输出或行为不如预期。

    3. start 的第一个带引号参数被当作标题,容易导致命令被误解析——这就是为什么用 ""

    4. 若要把输出丢弃:>nul 2>&1(把 stdout 和 stderr 都重定向到空设备)。
      例:cmd.exe /c start "" /min ping www.baidu.com >nul 2>&1 —— 但注意:输出重定向放在 start 的外层可能不会影响新窗口里的程序,通常需要把重定向放到被启动的命令里或用额外 cmd /c 包一下(见下)。


    更可靠的变体(最小化但不显示输出)

    如果你想最小化窗口并且丢弃输出(但是仍会在任务栏出现最小化窗口):

    cmd.exe /c start "" /min cmd /c "ping www.baidu.com >nul 2>&1"   # OK OOK  有大用 有大大用                
               

    说明:这里 start 启动的是一个 cmd /c "...",重定向在那个子 cmd 内生效。


    真正“隐藏”窗口(不在任务栏、不弹出)

    如果你的目标是完全不出现任何窗口,推荐两种更可靠的方法:

    方法 A — 使用 PowerShell 隐藏

    powershell -WindowStyle Hidden -Command "Start-Process -FilePath ping -ArgumentList 'www.baidu.com' -WindowStyle Hidden"                
               
    • -WindowStyle Hidden 会生成不可见窗口(不会出现在任务栏)。

    • 更通用、在许多场景下比 start /b 更稳健。

    方法 B — 在 Python 中用 CREATE_NO_WINDOW            

    当从 Python 调用(不希望任何窗口出现):

    import subprocess subprocess.run('ping www.baidu.com', creationflags=subprocess.CREATE_NO_WINDOW, shell=True)                
               
    • CREATE_NO_WINDOW 会告诉 Windows 不创建控制台窗口(对直接运行可执行文件有效)。

    • 注意:如果被调用的程序本身会显式创建窗口或再次调用 start,可能仍会出现窗口。


    针对你当前场景(RunAsSpc.exe 内部启动的 cmd)

    • 你控制不了 RunAsSpc.exe 内部如何调用 cmd,所以最稳妥的办法是修改被执行命令本身(也就是你 SPC 文件里的那条命令),让它自己以隐藏方式运行(用 PowerShell Hidden 或 start /b 并重定向)。

    • 例如把原来 ping www.baidu.com 改为:

      powershell -WindowStyle Hidden -Command "Start-Process -FilePath ping -ArgumentList 'www.baidu.com' -WindowStyle Hidden"                        

                         


                         

      这样即便 RunAsSpc.exe 启动 cmd 去执行该行命令,实际执行的是 PowerShell 的隐藏进程,不会弹出黑窗口。


    推荐(结论)

    • 最小化start "" /min ... 可以,但仍会有最小化窗口显示在任务栏

    • 完全隐藏(没有窗口/任务栏图标):用 PowerShell 的 -WindowStyle Hidden 或在 Python 使用 creationflags=subprocess.CREATE_NO_WINDOW(如果能直接控制被执行进程)。

    • 对于 RunAsSpc.exe 场景:修改 SPC 文件,把内部命令改成 PowerShell Hidden 的包装,是最可靠的解决方案。


    需要的话我可以:

    • 把你现有的 SPC 文件里 ping 这行具体改写成隐藏执行的版本;

    • 或给出 Python 示例,展示如何用 CREATE_NO_WINDOW 调用 RunAsSpc(并说明局限)。

    要哪个我直接给你代码/示例。



    普通分类: