![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Сделал обновлялку своего продукта. Разумеется надо админ права, что бы не было проблем. С этим проблем то и нет- манифест и все ок.
Дело вот в чем: Когда апдейтер скачал все, он должен закрыть программу. Я знаю ее хендл и успешно шлю ей wm_close и прога закрывается. Но она может делать свои дела и закрыться не сразу. по этому я сделал так: когда прога закрывается, она если может шлет апдейтеру сообщение что она закрылась и он тогда продолжает свою работу. Схема работает если апдейтер НЕ запущен с правами админа. Почему то апдейтер не обрабатывает сообщение если он админский. В чем может быть дело? |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
SendMessage:
Итого - эту особенность не обойти. Отправляющий сообщение поток должен иметь тот же integrity level, что и апдейтер, раз уж необходима пересылка сообщений в обе стороны. А почему, если известны хендлы, нельзя использовать WaitForSingleObject? Это сообщение отредактировал(а) kami - 21.3.2011, 00:04 |
||||
|
|||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Ну тут надо апдейт по другому писать. Лучше что бы программа обновляла себя сама
|
|||
|
||||
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
kami, А я могу применить к окну WaitForSingleObject?
ZBugz, специально делаю обновлялку отдельно- она будет для всех моих продуктов сразу |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
А, тогда понятно. Хотя я бы наверное отдельно написал бы. Я просто тоже дрючился с этим, в итоге нашел идиальное решение с моей точки зрения... Беру создаю мап файл при запуске программы, заодно по нему не даю запустить вторую копию программы, делаю апдейт, выгружаю мафайл, переименовываю exe самой программы из самой программы, потом закрываю программу и вызываю новый exe все из одной функции close. Короче я ни батников, ни чего то там больше, вообще не использую. Пробывал с UAC по полной, все равно пашет, тока спрашивает, типа тут прога че то мутит, но не как угроза, а как действие. |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Нет, но можно к процессу GetWindowThreadProcessId > OpenProcess > WaitFor Добавлено через 8 минут и 19 секунд
Отрубают электричество в доме, файл остается висеть на диске и программа больше не запускается |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
А я все хитро сделал Качаю файл, переименовываю старый и копирую новый Я это все предусматривал |
|||
|
||||
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
выдает ошибку нет доступа
код:
не пойму как пользоваться WaitForSingleObject. Все ИД процессов получаю верно, т.к. их показывает нормально |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
1. Косметическое замечание:
открытое через OpenProcess - это не pid, а Handle. 2. Существенное замечание: Внимательно читаем описание WaitForSingleObject:
А с какими правами вызывается OpenProcess? |
|||
|
||||
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
гы, но SYNCHRONIZE мне делфя не дает- типо хочет она метод SYNCHRONIZE из потоков взять, и разумеется не может.
может подскажите численный еквивалент? по поводу косметики: да, виноват, не подумал позже: вот, вытащил из Windows.pas
Это сообщение отредактировал(а) Racer - 23.3.2011, 21:53 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Лишнее.
Это сообщение отредактировал(а) kami - 23.3.2011, 22:55 |
|||
|
||||
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
кстати, а как обновить саму обновлялку? как заменить ее файл? использовать батник не хочу. какие есть способы? может они подойдут лучше и для основных продуктов?
|
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Ну вот я выше писал как без батников, с переименованием самого себя на лету и запуска 2-й копии и закрытие первой после переименования. |
|||
|
||||
| Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
немного не понял как переименовать самого себя на лету?
|
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Ну запущенная программа переименовывает само свой exe не выходя из программы |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |