その4までの内容で作った後、いくつかテストをしてみた。すると問題がすぐに2点みつかった。
コマンド実行後の復帰時間が遅い
明らかに応答を待っているようなので、WaitForSingleObjectをコメントアウトした。それにともなって、tmpディレクトリ以下に作った一時ファイルの削除処理を外した。処理を待たないので、コマンド完了前にファイルを削除するとまずい。
// コマンド実行部 void exec_cmd(stArgument *pstarg) { BOOL result; TCHAR CmdStr[UMAX_PATH]; PROCESS_INFORMATION pinfo = {NULL}; STARTUPINFO sinfo = {NULL}; _stprintf_s(CmdStr, sizeof(TCHAR) * UMAX_PATH, _T("\"C:\\Program Files\\TeraCopy\\TeraCopy.exe\" %s \"%s\" \"%s\" /OverwriteOlder"), pstarg->cmd, pstarg->src, pstarg->trg); GetStartupInfo(&sinfo); 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); }