BOOL isStartSuccess;
LPTSTR* commandArray = new LPTSTR[2];
commandArray[0] = _tcsdup(TEXT("C:\\Program Files\\WinRAR\\WinRAR.exe a -s -m5 -ibck -ep1 -r -s \"D:\\ZdKRX.rar\" \"D:\\ZdKRX\""));
commandArray[1] = _tcsdup(TEXT("C:\\Program Files\\WinRAR\\WinRAR.exe a -s -m5 -ibck -ep1 -r -s \"D:\\ZdSFE.rar\" \"D:\\ZdSFE\"")); PROCESS_INFORMATION* pidInfo = new PROCESS_INFORMATION[2];
for (int i = 0; i < 2; i ++)
{
ZeroMemory(&pidInfo[i], sizeof(PROCESS_INFORMATION));
}
STARTUPINFO* startInfo = new STARTUPINFO[2];
for (int i = 0; i < 2; i++)
{
ZeroMemory(&startInfo[i], sizeof(STARTUPINFO));
} HANDLE* handles = new HANDLE[2]; for (int i = 0; i < 2; i++)
{
startInfo[i].cb = sizeof(startInfo); startInfo[i].lpReserved = nullptr;
startInfo[i].lpReserved2 = nullptr;
startInfo[i].lpTitle = nullptr;
startInfo[i].lpDesktop = nullptr;
startInfo[i].dwFlags = STARTF_USESTDHANDLES;
startInfo[i].hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo[i].hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo[i].hStdError = GetStdHandle(STD_ERROR_HANDLE); isStartSuccess = CreateProcess(nullptr, commandArray[i], nullptr, nullptr, FALSE, CREATE_NO_WINDOW, nullptr, nullptr, &startInfo[i], &pidInfo[i]);
if (isStartSuccess == FALSE)
{
cout << "Create WinRar Process Failed" << endl;
int ret = GetLastError();
cout << "Error Code: " << ret << endl;
} handles[i] = pidInfo[i].hProcess;
}

WaitForMultipleObjectsEx(2, handles, TRUE, INFINITE, FALSE);
//为什么这里的waitformultiobjectsex不生效 for (int i = 0; i < 2; i++)
{
CloseHandle(pidInfo[i].hThread);
CloseHandle(pidInfo[i].hProcess);
} delete[] commandArray;
delete[] pidInfo;
delete[] startInfo;
delete[] handles;小白求教,/为什么waitformultiobjectsex不生效,winrar还在工作就返回了

解决方案 »

  1.   

    看看 WaitForMultipleObjectsEx 返回值是多少?
      

  2.   


    返回值是WAIT_OBJECT_0+0
      

  3.   

    参考winrar帮助中命令行参数相关章节。
      

  4.   


    程序运行过程中winrar是正常进行解压工作的,只是WaitForMultipleObjectsEx 没有等winrar完成工作就返回了
      

  5.   

    仅供参考:
     WinRAR 在成功操作的情况下以 0 代码退出。非零退出代码表示下列错误:代码值 描述
    0 成功操作。
    1 警告。发生非致命错误。
    2 发生致命错误。
    3 解压时发生 CRC 错误。
    4 尝试修改一个 锁定的压缩文件。
    5 写错误。
    6 文件打开错误。
    7 错误命令行选项。
    8 内存不足。
    9 文件创建错误。
    255 用户中断。
      

  6.   

    如果你CreateProcess没有问题的话,Wait应该就不会错的~
      

  7.   

    会不会是我的code写的有问题createprocess返回值是1,已经正常运行了,winrar照常解压会不会我create出来的进程调用winrar后结束了按道理不会这么跑啊
      

  8.   

    会不会是我的code写的有问题createprocess返回值是1,已经正常运行了,winrar照常解压会不会我create出来的进程调用winrar后结束了按道理不会这么跑啊我用管理员方式运行vs2015,然后重新跑一次,WaitForMultipleObjectsEx 就正常的等待了,为什么会这样大侠,求教