Название: QProcess startDetached - непонятка Отправлено: CMorgan от Январь 29, 2012, 13:33 Добрый день. Пишу апдейтер для прог. Класс апдейтера встраивается в необходимое приложение (к примеру, назовем его test.exe), проверяет есть ли для этого приложения апдейты, если есть - скачивает их, запускает отдельную программу "updater.exe" (занимающиеся распихиванием скаченных файлов по нужным путям и запуском необходимых программ) параллельно грохая родительское приложение test.exe.
В конце процедуры апдейта возникает необходимость из файла update.exe перезаписать тот файл, который собственно и запускался в начале (test.exe) и запустить его (уже обновленный). И вот тут возникла некоторая непонятка. код запуска updater.exe из приложения test.exe выглядит так: Код: bool dbUpdater::runupdater() В свою очередь в updater.exe Есть функция проверки, на случай если нам надо перезаписать процесс который еще занят кем-либо: Код: bool IsProcessRun( QString processName ) И собственно функция перезаписи: Код: bool File_util::f_instal(QString filePath, QString fileName) Вопрос: что я делаю не так? Что без этого цикла: Код: while(!QFile::remove(Dest)) //[b]Так срабатывает проходя цикл 2-3 раза.[/b] Название: Re: QProcess startDetached - непонятка Отправлено: LisandreL от Январь 29, 2012, 18:59 Код: IsProcessRun(Dest_file_info.fileName());//:Ждем пока процесс не освободится Название: Re: QProcess startDetached - непонятка Отправлено: CMorgan от Январь 29, 2012, 21:19 Ничего она не ждёт. Она возвращает есть такой процесс или нет. Там в IsProcessRun есть строчка: WaitForSingleObject(myproc, INFINITE); - если она этот процесс в запущенных нашла будет ждать пока он не убьется. Мож она конечно на открытие с флагом SYNCHRONIZE тож требует SeDebugPrivilege и возвращает NULL при выполнении не из под студии, но первоначально я ее не вставлял и просто прогонял функцию на наличие этого процесса в цикле - пока не вернет false. Получалось цикл срабатывал 80-150 раз возвращал наконец false, после чего я пытался делать QFile::remove(Dest); и получал такой же отлуп. Т.е. без Sleep она упорно не хочет грохать первый процесс. Название: Re: QProcess startDetached - непонятка Отправлено: CMorgan от Февраль 14, 2012, 11:55 Что-то вспомнил про этот пост.
Если кто-то вдруг столкнется с похожим поведением, посмотрите нет ли на вашей системе антивиря Касперского ;D Именно он держит Хэндл на запущенный процесс, и продолжает его держать некоторое время после того как процесс уже усе. |