TeraCopyをコマンドラインから呼び出す(その3)

休みなのでコーディングが進む。
構造体stArgumentにコマンドライン引数を解析した結果が入っているので、コマンド実行部のexec_cmd()はTeraCopy.exeを呼び出して実行するだけだ。標準Cだとsystem()を使うところだけど、UNICODE対応しながらコードを書いているので、CreateProcessを使うことにした。

// コマンド実行部
void exec_cmd(stArgument *pstarg)
{
  BOOL result;
  TCHAR CmdStr[UMAX_PATH];
  PROCESS_INFORMATION pinfo = {NULL};
  STARTUPINFO sinfo = {NULL};

  sinfo.cb = sizeof(STARTUPINFO);
  _stprintf_s(CmdStr, sizeof(TCHAR) * UMAX_PATH, 
  _T("\"C:\\Program Files\\TeraCopy\\TeraCopy.exe\" %s \"%s\" \"%s\" /OverwriteOlder"),
        pstarg->cmd, pstarg->src, pstarg->trg);

  result = CreateProcess(NULL,
              CmdStr, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
              NULL, NULL, &sinfo, &pinfo);
  if (result == FALSE) { // 失敗
    usage();
  }
  CloseHandle(pinfo.hThread);
  WaitForSingleObject(pinfo.hProcess, INFINITE);
  CloseHandle(pinfo.hThread);
}

これで、とりあえず完成したので試してみると問題なく動く。良さそうなので調査用のprintfを全て削除してみたが、コンソールが表示される。
あれ?
どうも、コンソールアプリのプロジェクトでコマンドを作ると、言葉通りコンソールが表示されるみたいだ。えーっと、対処方法は見つかったのでもう少し続く。