C++ 运行批处理文件而不重定向输出
Posted
技术标签:
【中文标题】C++ 运行批处理文件而不重定向输出【英文标题】:C++ Run Batch File Without Redirecting Output 【发布时间】:2015-07-22 10:12:26 【问题描述】:tempString = (string("cmd.exe /C \"") + tempString + "\"");
STARTUPINFO si = sizeof(STARTUPINFO) ;
PROCESS_INFORMATION pi;
CreateProcess(NULL, (LPSTR)tempString.c_str(), 0, 0, FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, 0, &si, &pi);
我正在通过 dll 从另一个进程中启动批处理脚本。 问题是进程正在显示:
error : 不支持输入重定向,退出进程 马上。
如何启动一个批处理脚本,使其独立于调用进程(被调用者关闭时不会关闭),并且不在调用进程的控制台中输出?
【问题讨论】:
见this answer @wOxxOm DETATCH_PROCESS 不起作用,但我阅读了其他可用的标志,并且 CREATE_NEW_CONSOLE 在我的情况下确实有效,谢谢。 如果您将您的发现添加为答案并接受它,那就太好了。 【参考方案1】:如果你不想在执行命令字符串时显示控制台窗口,你可以这样做:
tempString = (string(" /C \"") + tempString + "\"");
ShellExecute(NULL, NULL, "cmd.exe", tempString.c_str(), NULL, SW_HIDE);
【讨论】:
WinExec
很久以前就被弃用了,不应使用。它的存在只是为了兼容 16 位应用程序。
感谢回复,我忘记了 WinExec API 已弃用,我修改了答案。
我的问题不是隐藏窗口,而是防止输出重定向。【参考方案2】:
CREATE_NEW_CONSOLE
标志分配一个新的控制台供进程使用,这样它就不会使用与调用进程相同的标准输出。
【讨论】:
以上是关于C++ 运行批处理文件而不重定向输出的主要内容,如果未能解决你的问题,请参考以下文章