Как узнать о завершении процесса?

 
Запускаю извлечение файла из архива, например через WinExec. И прежде чем дальше с этим файлом работать, хотелось бы быть уверенным, что процесс закончился. Самая простая идея - попытаться через возвращаемый WinExec дескриптор что-нибудь у этого процесса спросить. Например вызвать что-то типа GetProcessId. Хотелось бы конечно как-то сократить время на эксперименты, может кто-нибудь поделится опытом решения подобной задачи?
 

Если не путаю, то вы можете после создание процесса, например через CreateProcess(), передать описатель в WaitForSingleObject() и ждать завершения.

 
220Volt:

Если не путаю, то вы можете после создание процесса, например через CreateProcess(), передать описатель в WaitForSingleObject() и ждать завершения.


Спасибо, я и такую возможность имел в виду проверить. Вопрос конечно будет ли индикатор ожидать завершения? Ответ правда тоже понятен - нужно проверять :).
 
Хм, интересно, а вариант воспользоваться каким-нибудь zipfldr.dll прямо из индикатора не пройдет?
 
alsu:
Хм, интересно, а вариант воспользоваться каким-нибудь zipfldr.dll прямо из индикатора не пройдет?

Вообще первая мысль у меня была что должен быть WinAPI для работы с зипом, раз это встроено в неё. Но как-то долго ничего не находилось и мысль пошла другим путём :).
 
Наверное, не пойдет, там какой-то COM-сервер внутри, хрен разберешь))
 

Собственно мне шашечки или ехать? Надо быть проще :). Делаем командный файл, в конце ставим переменную окружения и пишем её в файл флагов. Пред запуском файл флагов чистим, после запуска проверяем "пока не всплывёт".

Против лома нет приёма :)

 

Я сегодня подобными фокусами занимался, вспомнил про эту тему. Вот что получилось:

#import "msvcrt40.dll"  // msvcrt20.dll  msvcrt.dll
    int system (const uchar&[]);
#import 

void start()
{
   uchar cmd_line[100];
   StringToCharArray("notepad.exe", cmd_line);
   // StringToCharArray("start /B notepad", cmd_line);    // А так без ожидания
   system(cmd_line);
   Alert("return");
}

Прикрутил system() из C Run time библиотеки, наверное везде есть. Заставить ждать завершения процесса командную строку:

C:\>start /WAIT notepad
Причина обращения: