Окончание работы другого приложения
От: Lenikur Россия  
Дата: 08.10.01 10:36
Оценка:
Привет!
Проблема: Нужно заархивировать файл с помощью RAR и после окончания этого процесса выполнить некоторые действия с полученными файлами архива.
RAR я запускаю с помощью ShellExecute.
Как поймать окончание архивации?
Re: Окончание работы другого приложения
От: sasha Грузия  
Дата: 08.10.01 12:21
Оценка:
Здравствуйте Lenikur, Вы писали:

L>Привет!

L>Проблема: Нужно заархивировать файл с помощью RAR и после окончания этого процесса выполнить некоторые действия с полученными файлами архива.
L>RAR я запускаю с помощью ShellExecute.
L>Как поймать окончание архивации?

Создаешь новый поток(процесс) для этого, потом используешь WaitForSingleObject(hThread(hProcess), INFINITE);
Re[2]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 05:05
Оценка:
Спасибо за ответ, но я сталкиваюсь с реализацией многопоточности впервые, поэтому не мог бы ты по подробнее объяснить, как это реализовать. Как я понимаю, единственное, что мне нужно это поймать код завершения процесса, но как?
Re[3]: Окончание работы другого приложения
От: Snax Россия  
Дата: 09.10.01 05:58
Оценка:
Забей на shellExecute.

Используй AssocQueryString + CreateProcess

Павел.
Re[4]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 06:09
Оценка:
Здравствуйте Snax, Вы писали:

S>Забей на shellExecute.


S>Используй AssocQueryString + CreateProcess


S>Павел.


Я с удовольствием забью на нее. Но нельзя ли по подробнее...
Re[5]: Окончание работы другого приложения
От: Snax Россия  
Дата: 09.10.01 06:30
Оценка:
L>Я с удовольствием забью на нее. Но нельзя ли по подробнее...
Наколько я понял, ты используешь ShellExecute только потому,
что не знаешь где лежит экзешник, обрабатывающий .rar

Потому что если ты это знаешь, или можешь найти через
::SearchPath(), то просто используй ::CreateProcess().
Он вернет тебе HANDLE процесса, который можно скормить
::WaitForSingleObject().

Так вот. ::AssocQueryString() как раз нужна чтобы узнать,
какой exeшник зарегистрирован за расширением .rar
Re[6]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 06:45
Оценка:
Спасибо, дружище!
Я прочитал, что процесс сигнализирует как-раз о своем завершении. Теперь все ясно.
Re[6]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 06:50
Оценка:
::AssocQueryString() я что-то не нашел в MSDN!!??
Re[7]: Окончание работы другого приложения
От: Snax Россия  
Дата: 09.10.01 07:17
Оценка:
Здравствуйте Lenikur, Вы писали:

L>::AssocQueryString() я что-то не нашел в MSDN!!??


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/SHLWAPI/Registry/AssocQueryString.asp?frame=true
Re[8]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 09:00
Оценка:
Странно, я подключил #include <Shlwapi.h>
но компил ругается на AssocQueryString, говорит не опрделен.
Я просмотрел *.h, там действительно нет ее.
???
Re[7]: Окончание работы другого приложения
От: sasha Грузия  
Дата: 09.10.01 09:14
Оценка:
Здравствуйте 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
Re[8]: Окончание работы другого приложения
От: Lenikur Россия  
Дата: 09.10.01 09:48
Оценка:
Спасибо Sasha.
Дело в том, что я пишу классы для работы с разными архиваторами, и гарантированно эти архиваторы присутствуют на компе. Но вообще-то получение экешника по типу файла через реестр меня очень заинтересовало. Может знаешь как это сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.