Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > ShellExecute как узнать закрылся ли вызванный файл


Автор: onlyI 13.3.2009, 15:54
Здравствуйте. Помогите пож-ста.
ShellExecute вызывает start.bat, который работает достаточно долго (от 1-3сек - до ...). Как узнать, что exeшник закрылся, чтобы прочитать файл .txt, который получается в результате работы этого exeшника???

А то у меня получается exeшник еще не закрылся, а программа лезет читать .txt, которого еще нету((

ShellExecute(NULL,"open","C:\\start.exe", NULL, SW_SHOWNORMAL); 
ReadFile("... .txt");

Сделать Sleep(1000); (ну или другое число) не катит, вдруг долго, или не хватит.

ПыЗы: надеюсь понятна моя проблема.

Автор: azesmcar 13.3.2009, 16:01
найди процесс и сделай WaitForSingleObject

Автор: GremlinProg 13.3.2009, 22:45
вместо ShellExecute вызывай ShellExecuteEx
в параметре SHELLEXECUTEINFO::hProcess хранится дескриптор запущенного процесса
его и надо ожидать перед чтением файла

Автор: 586 14.3.2009, 00:51
Цитата(GremlinProg @  13.3.2009,  22:45 Найти цитируемый пост)
в параметре SHELLEXECUTEINFO::hProcess хранится дескриптор запущенного процесса
его и надо ожидать перед чтением файла 

... и потом не забыть закрыть этот дескриптор ф-цией CloseHandle.

Чтобы поле SHELLEXECUTEINFO::hProcess использовалось, нужно установить флаг fMask = SEE_MASK_NOCLOSEPROCESS.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)