Название: как довести до ума updater... Отправлено: zoro86 от Май 19, 2010, 09:20 Тут у меня стоит задача написание updater - a ...
алгоритм такой: ... имеется терминальная программа для оплаты услуг ... ведется проверка файлов и версии программы на стороне сервера HTTP ... если есть изменения в глобальном hash (size + date + name) всех имеющихся файлов то запускается updater ... он качает Xml: Код: ... ... потом идет сравнение с заранее подсчитанными hash локальными файлами... ... если есть изменения то файл начинает качаться... ... итак циклически до последней закачки То что приведено сверху я уже реализовал и отестировал... если обновился основной .exe файл терминальной программы я на данный момент качаю его в tmp/ .... после подтверждения что файл закачался нормально надо его обновить... Вопрос в следующем... как проверить и удалить процесс если я знаю имя .exe файла с помощью QProcess? искал по форуму ничего конкретного не нашел... кто нить помогите... Название: Re: как довести до ума updater... Отправлено: nn1317 от Май 19, 2010, 09:46 варианта 2 - получить список процессов с pid и выбрать свой или же заюзать апи-функцию получения Pid по имени бинаря (название не помню, но она есть). как дополнительный вариант - выполнить консольную команду kill в терминале (на винде))
Название: Re: как довести до ума updater... Отправлено: zoro86 от Май 19, 2010, 10:09 хотелось бы конечно через WinApi но я в этом не шарю...
если кто работал давайте пример... на счет taskkill я его на данный момент и юзаю.... вроде пока работает... довожу до ума.. Название: Re: как довести до ума updater... Отправлено: Wlad_C от Май 19, 2010, 15:31 Я удалял Excel следующим образом:
bool GetExcelPid(HWND hExWindow, LPDWORD pPid) { // Получаем PID процесса excel.exe if (!hExWindow) return false; char ClassName[100]; // Получаем PID нашего процесса if (!GetWindowThreadProcessId(hExWindow, pPid)) return false; // На всякий случай проверяем является ли он действительно Excel, для этого // проверям класс процесса, он должен быть "XLMAIN" (получено экспериментальным путем) if (GetClassName(hExWindow, ClassName, 99) == 0) return false; if (CompareStr("XLMAIN", ClassName) != 0) return false; return true; } bool KillProcess(DWORD PID) { // Функция для закрытия любого процесса по его PID'у bool ReturnCode = false; HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, false, PID); if (hProcess != NULL || hProcess != INVALID_HANDLE_VALUE) { if (TerminateProcess(hProcess, -1)) ReturnCode = true; CloseHandle( hProcess ); } return ReturnCode; Попробуй по аналогии. } Название: Re: как довести до ума updater... Отправлено: fuCtor от Май 19, 2010, 20:30 Я так понял что Updater отдельная программа, то можно сделать такой вариант:
посмотреть на реализацию SingleApplication и при необходимости закрытия посылать сообщение. Название: Re: как довести до ума updater... Отправлено: zoro86 от Май 20, 2010, 08:24 Тут у меня еще один вопросик возник...
в реализации примера examples\network\downloadmanager имеется ряд недоделок: там нет функции подкачки.... или хотя бы если если докачка прервалась чтобы он Succeeded не выдавал а отлавливал ошибку... Код: QNetworkRequest request(url); где manager это объект QNetworkAccessManager... Код: void DownloadManager::downloadFinished() какие будут предложения для решения этой задачи... может мне проверять размер и по размеру смотреть в слоте докачал или нет или все же есть какой нить другой путь??? Название: Re: как довести до ума updater... Отправлено: ритт от Май 20, 2010, 09:42 недавно про докачку тема была. мб всё-таки начнём пользоваться поиском?
Название: Re: как довести до ума updater... Отправлено: Alex Custov от Май 20, 2010, 10:42 недавно про докачку тема была. мб всё-таки начнём пользоваться поиском? а где? Мне было бы интересно почитать, а поиск по слову "докачка" не выдал именно таких тем. Название: Re: как довести до ума updater... Отправлено: zoro86 от Май 20, 2010, 10:57 У меня получилось реализовать когда файл не докачен я его качаю заново...
порылся по форуму но там не доконченная тема http://www.prog.org.ru/topic_13270_0.html (http://www.prog.org.ru/topic_13270_0.html) надо попробывать , для загрузки больших файлов самый раз.. Название: Re: как довести до ума updater... Отправлено: crossly от Май 20, 2010, 11:18 тема вполне законченная.....
Название: Re: как довести до ума updater... Отправлено: Alex Custov от Май 20, 2010, 17:27 недавно про докачку тема была. мб всё-таки начнём пользоваться поиском? ох надо что-то делать с поиском. По слову "докачка" вышеназванную тему он не находит, т.к. там слово "докачку". Так же ж половина тем упускается из поиска. Название: Re: как довести до ума updater... Отправлено: Alex Custov от Май 20, 2010, 17:32 У меня получилось реализовать когда файл не докачен я его качаю заново... порылся по форуму но там не доконченная тема http://www.prog.org.ru/topic_13270_0.html (http://www.prog.org.ru/topic_13270_0.html) надо попробывать , для загрузки больших файлов самый раз.. Когда файл недокачанный, как уже сказали, надо использовать HTTP Range: Код
В этом случае сервер будет отдавать файл, начиная с "size" байта, а не сначала. Если сервер не поддерживает Range, он отдаст HTTP 416. Название: Re: как довести до ума updater... Отправлено: zoro86 от Май 25, 2010, 07:20 то есть не size + 1 отправлять?
|