Как выполнить код после создания файла? - PullRequest
0 голосов
/ 05 января 2011

У меня возникла эта проблема.Мой ShellExecute работает нормально, вывод - файл изображения в формате PNG.Проблема в том, что этот процесс занимает некоторое время (секунды) для создания файла.Между тем, мой result здесь уже выполнен, но выдает сообщение об ошибке, поскольку PNG-файл из ShellExecute еще не существует.Как убедиться, что файл существует в первую очередь, а затем может выполняться result.

    ShellExecute(0,                           
                 _T("open"),            
                 _T("c:\\convert.exe"), 
                 full,                  
                 0,                     
                 SW_HIDE);

    result  = ExecuteExternalProgramCompare(L"c.png", L"t.png");  // this line always gives error because the file c.png is not produce yet by shellexecute above.

обновление: моя попытка конвертировать в ShellexecuteEx.

SHELLEXECUTEINFO info = {0};

info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask  = SEE_MASK_NOCLOSEPROCESS;
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.nShow = SW_HIDE;

1 Ответ

1 голос
/ 05 января 2011

Вы должны использовать ShellExecuteEx . Это позволит вам получить дескриптор вызываемого процесса, чтобы вы могли дождаться его завершения.

SHELLEXECUTEINFO info = {0};

info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask  = SEE_MASK_NOCLOSEPROCESS;
info.lpVerb = _T("open");
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.lpDirectory = NULL;
info.nShow = SW_HIDE;

if (ShellExecuteEx (&info))
{
   WaitForSingleObject (info.hProcess, INFINITE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...