调用CreateProcess()时如何在控制台上隐藏命令行字符串?

时间:2018-04-12 01:35:38

标签: windows

我的程序在内部派遣子进程处理任务,以防止主进程崩溃。使用命令行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_WINDOWdwCreateFlags。虽然子提示符的行为有所不同,但它仍然显示命令行字符串。

试验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

1 个答案:

答案 0 :(得分:2)

CreateProcess从不向stdout或stderr打印任何内容,必须有其他内容打印它,很可能是您自己代码中的printfcout调用。