【问题标题】:C++ Run Batch File Without Redirecting OutputC++ 运行批处理文件而不重定向输出
【发布时间】: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 : 不支持输入重定向,退出进程 马上。

如何启动一个批处理脚本,使其独立于调用进程(被调用者关闭时不会关闭),并且不在调用进程的控制台中输出?

【问题讨论】:

  • @wOxxOm DETATCH_PROCESS 不起作用,但我阅读了其他可用的标志,并且 CREATE_NEW_CONSOLE 在我的情况下确实有效,谢谢。
  • 如果您将您的发现添加为答案并接受它,那就太好了。

标签: c++ batch-file createprocess


【解决方案1】:

如果你不想在执行命令字符串时显示控制台窗口,你可以这样做:

tempString = (string(" /C \"") + tempString + "\"");
ShellExecute(NULL, NULL, "cmd.exe", tempString.c_str(), NULL, SW_HIDE);

【讨论】:

  • WinExec 很久以前就被弃用了,不应使用。它的存在只是为了兼容 16 位应用程序。
  • 感谢回复,我忘记了 WinExec API 已弃用,我修改了答案。
  • 我的问题不是隐藏窗口,而是防止输出重定向。
【解决方案2】:

CREATE_NEW_CONSOLE 标志分配一个新的控制台供进程使用,这样它就不会使用与调用进程相同的标准输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多