system()到c ++而不调用cmd.exe

时间:2010-10-06 19:01:58

标签: c++ c cmd

如何在不显示cmd.exe的情况下运行system(“”)?

我使用cstdlib标头 code :: blocks 10.5

我看到this question代表c#,但我不知道c#;)

2 个答案:

答案 0 :(得分:6)

我相信你必须改为使用CreateProcess

答案 1 :(得分:1)

我必须说,现有的答案并不是特别具有描述性。这是一种在没有新cmd.exe窗口的情况下执行命令的方法。

基于an answer by Roland RabienMSDN,我写了一个工作函数:

int windows_system(const char *cmd)
{
  PROCESS_INFORMATION p_info;
  STARTUPINFO s_info;
  LPSTR cmdline, programpath;

  memset(&s_info, 0, sizeof(s_info));
  memset(&p_info, 0, sizeof(p_info));
  s_info.cb = sizeof(s_info);

  cmdline     = _tcsdup(TEXT(cmd));
  programpath = _tcsdup(TEXT(cmd));

  if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info))
  {
    WaitForSingleObject(p_info.hProcess, INFINITE);
    CloseHandle(p_info.hProcess);
    CloseHandle(p_info.hThread);
  }
}

适用于所有Windows平台。像system()一样打电话。