Привет!
Проблема: Нужно заархивировать файл с помощью RAR и после окончания этого процесса выполнить некоторые действия с полученными файлами архива.
RAR я запускаю с помощью ShellExecute.
Как поймать окончание архивации?
Здравствуйте Lenikur, Вы писали:
L>Привет! L>Проблема: Нужно заархивировать файл с помощью RAR и после окончания этого процесса выполнить некоторые действия с полученными файлами архива. L>RAR я запускаю с помощью ShellExecute. L>Как поймать окончание архивации?
Создаешь новый поток(процесс) для этого, потом используешь WaitForSingleObject(hThread(hProcess), INFINITE);
Спасибо за ответ, но я сталкиваюсь с реализацией многопоточности впервые, поэтому не мог бы ты по подробнее объяснить, как это реализовать. Как я понимаю, единственное, что мне нужно это поймать код завершения процесса, но как?
L>Я с удовольствием забью на нее. Но нельзя ли по подробнее...
Наколько я понял, ты используешь ShellExecute только потому,
что не знаешь где лежит экзешник, обрабатывающий .rar
Потому что если ты это знаешь, или можешь найти через
::SearchPath(), то просто используй ::CreateProcess().
Он вернет тебе HANDLE процесса, который можно скормить
::WaitForSingleObject().
Так вот. ::AssocQueryString() как раз нужна чтобы узнать,
какой exeшник зарегистрирован за расширением .rar
Здравствуйте Lenikur, Вы писали:
L>::AssocQueryString() я что-то не нашел в MSDN!!??
По-моему, если твое приложение так активно использует rar, то его необходимо таскать везде с собой. Представь, что на машине не установлен rar, тогда копание в реестре вряд ли поможет — облом!
Если решишь сделать так, то вот код:
PROCESS_INFORMATION pi;
STARTUPINFO si= {sizeof(si)};
TCHAR CommandLine;
// инициализация командной строки...
CreateProcess(NULL,CommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess, INFINITE);
// сюда попадешь после окончания работы rar
Спасибо Sasha.
Дело в том, что я пишу классы для работы с разными архиваторами, и гарантированно эти архиваторы присутствуют на компе. Но вообще-то получение экешника по типу файла через реестр меня очень заинтересовало. Может знаешь как это сделать?