You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CreateProcess创建的cmd.exe无法读取WriteFile写入内容如何解决

问题描述

通过CreateProcess创建cmd.exe子进程,启动阶段传入的第一条命令可正常执行,进程创建完成后通过WriteFile写入的后续命令无响应、无法运行。

错误原因
  • 后续命令错误携带cmd启动参数:/k是cmd.exe的进程启动参数,仅在创建进程时传入有效。子进程进入交互运行状态后,直接输入命令内容即可,不需要携带启动参数。
  • 命令末尾未加换行符:cmd交互模式下,只有接收到换行符\r\n才会判定输入结束,触发命令执行。你写入的命令没有换行,cmd会一直处于等待输入状态,不会执行命令。
  • WriteFile参数不规范:WriteFile的第四个参数需要传入DWORD*类型的指针接收实际写入字节数,直接传NULL可能导致调用异常。
修复步骤
  1. 修改命令拼接逻辑,去掉/k参数,末尾添加换行符:
// 原代码
sprintf(kom,"/k echo %d",i);
// 修改后
sprintf(kom,"echo %d\r\n",i);
  1. 修正WriteFile调用参数:
DWORD wLen;
// 原代码
BOOL odgw = WriteFile(_stdin_wr,kom,strlen(kom),0,0);
// 修改后
BOOL odgw = WriteFile(_stdin_wr, kom, strlen(kom), &wLen, 0);
// 可选:刷新缓冲区确保命令立即写入管道
FlushFileBuffers(_stdin_wr);
修复后效果

修改完成后运行程序,即可看到echo 2到echo 9的命令依次正常执行,输出对应内容。

内容的提问来源于stack exchange,提问作者cnikbesku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:45:03