我的程序在内部派遣子进程处理任务,以防止主进程崩溃。使用命令行CreateProcess()
调用Worker.exe MyArg1 MyArg2
时,整个字符串将显示在控制台上。这个内部进程分支并不重要,我想将其隐藏起来。
以下是它的调用方式。
wchar_t* wcsCommandLine[260] = L"Worker.exe MyArg1 MyArg2"
STARTUPINFO info = {};
info.cb = sizeof info;
PROCESS_INFORMATION pi = {};
DWORD dwCreateFlags = 0;
BOOL bCreateProc = ::CreateProcessW(
nullptr, // lpApplicationName
wcsCommandLine,
0, // lpProcessAttributes
0, // lpThreadAttributes
TRUE, // bInheritHandles
dwCreateFlags,
0, // lpEnvironment
0, // lpCurrentDirectory
&info,
&pi);
试用1 dwCreateFlags
我已尝试在CREATE_NEW_CONSOLE
中添加CREATE_NO_WINDOW
或dwCreateFlags
。虽然子提示符的行为有所不同,但它仍然显示命令行字符串。
试验2
我在调用system("@echo off")
之前添加了CreateProcess()
,但它也无效。
输出
Progress: 0.23
Progress: 0.24
Worker.exe MyArg1 MyArg2 <-- Want to hide this
Progress: 0.25
Progress: 0.27
ProWorker.exe MyArg1 MyArg2 <-- Want to hide this
gress: 0.29
答案 0 :(得分:2)
CreateProcess
从不向stdout或stderr打印任何内容,必须有其他内容打印它,很可能是您自己代码中的printf
或cout
调用。