Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SendMessage и UAC, Не обрабатывает сообщения если прога зап 
:(
    Опции темы
Racer
Дата 20.3.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



Сделал обновлялку своего продукта. Разумеется надо админ права, что бы не было проблем. С этим проблем то и нет- манифест и все ок.
Дело вот в чем:
Когда апдейтер скачал все, он должен закрыть программу. Я знаю ее хендл и успешно шлю ей wm_close и прога закрывается. Но она может делать свои дела и закрыться не сразу. по этому я сделал так: когда прога закрывается, она если может шлет апдейтеру сообщение что она закрылась и он тогда продолжает свою работу. Схема работает если апдейтер НЕ запущен с правами админа.

Почему то апдейтер не обрабатывает сообщение если он админский. В чем может быть дело?
PM MAIL   Вверх
kami
Дата 21.3.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Racer @  20.3.2011,  23:29 Найти цитируемый пост)
Почему то апдейтер не обрабатывает сообщение если он админский. В чем может быть дело?

SendMessage:
Цитата

Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.

Итого - эту особенность не обойти. Отправляющий сообщение поток должен иметь тот же integrity level, что и апдейтер, раз уж необходима пересылка сообщений в обе стороны.

А почему, если известны хендлы, нельзя использовать WaitForSingleObject?

Это сообщение отредактировал(а) kami - 21.3.2011, 00:04
PM MAIL WWW   Вверх
ZBugz
Дата 21.3.2011, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Ну тут надо апдейт по другому писать. Лучше что бы программа обновляла себя сама
PM MAIL   Вверх
Racer
Дата 21.3.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



kami, А я могу применить к окну WaitForSingleObject?


ZBugz, специально делаю обновлялку отдельно- она будет для всех моих продуктов сразу 

PM MAIL   Вверх
ZBugz
Дата 22.3.2011, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Racer @ 21.3.2011,  23:31)
ZBugz, специально делаю обновлялку отдельно- она будет для всех моих продуктов сразу

А, тогда понятно. Хотя я бы наверное отдельно написал бы.
Я просто тоже дрючился с этим, в итоге нашел идиальное решение с моей точки зрения...
Беру создаю мап файл при запуске программы, заодно по нему не даю запустить вторую копию программы, делаю апдейт, выгружаю мафайл, переименовываю exe самой программы из самой программы, потом закрываю программу и вызываю новый exe все из одной функции close. Короче я ни батников, ни чего то там больше, вообще не использую.
Пробывал с UAC по полной, все равно пашет, тока спрашивает, типа тут прога че то мутит, но не как угроза, а как действие.

PM MAIL   Вверх
kami
Дата 22.3.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Racer @  21.3.2011,  23:31 Найти цитируемый пост)
, А я могу применить к окну WaitForSingleObject?

Нет, но можно к процессу GetWindowThreadProcessId > OpenProcess > WaitFor

Добавлено через 8 минут и 19 секунд
Цитата(ZBugz @  22.3.2011,  08:57 Найти цитируемый пост)
Беру создаю мап файл при запуске программы, заодно по нему не даю запустить вторую копию программы,

Отрубают электричество в доме, файл остается висеть на диске и программа больше не запускается smile
PM MAIL WWW   Вверх
ZBugz
Дата 23.3.2011, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата

Отрубают электричество в доме, файл остается висеть на диске и программа больше не запускается smile

А я все хитро сделал  smile 
Качаю файл, переименовываю старый и копирую новый smile А можно и копировать старый в bak и потом заменить старый exe smile 
Я это все предусматривал  smile 
PM MAIL   Вверх
Racer
Дата 23.3.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



выдает ошибку нет доступа

код:
Код

GetWindowThreadProcessId(StrToInt(Product.Window), @pid);
    ShowMessage('Process ID: ' + InttoStr(pid));
    pid2:= OpenProcess(READ_CONTROL, False, pid);
    ShowMessage('Open Process ID: ' + InttoStr(pid2));

    SendMessage(StrToInt(Product.Window), WM_CLOSE, 0, 0);

    ret:= WaitForSingleObject(pid2, INFINITE);

    ShowMessage('Last Error: ' + IntToStr(GetLastError)); // дает 5 - нет доступа


не пойму как пользоваться WaitForSingleObject. Все ИД процессов получаю верно, т.к. их показывает нормально
PM MAIL   Вверх
kami
Дата 23.3.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



1. Косметическое замечание:
Цитата(Racer @  23.3.2011,  21:05 Найти цитируемый пост)
 ShowMessage('Open Process ID: ' + InttoStr(pid2));

открытое через OpenProcess - это не pid, а Handle.
2. Существенное замечание:
Внимательно читаем описание WaitForSingleObject: 
Цитата
The handle must have the SYNCHRONIZE access right

А с какими правами вызывается OpenProcess?
PM MAIL WWW   Вверх
Racer
Дата 23.3.2011, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



гы, но SYNCHRONIZE  мне делфя не дает- типо хочет она метод SYNCHRONIZE из потоков взять, и разумеется не может.
может подскажите численный еквивалент?

по поводу косметики: да, виноват, не подумал smile спасибо за замечание, стараюсь выработать у себя правильность во всем, но не всегда получается

позже:
вот, вытащил из Windows.pas
Код

{ SYNCHRONIZE              = $00100000; defined above }


Это сообщение отредактировал(а) Racer - 23.3.2011, 21:53
PM MAIL   Вверх
kami
Дата 23.3.2011, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Лишнее.

Это сообщение отредактировал(а) kami - 23.3.2011, 22:55
PM MAIL WWW   Вверх
Racer
Дата 23.3.2011, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



кстати, а как обновить саму обновлялку? как заменить ее файл? использовать батник не хочу. какие есть способы? может они подойдут лучше и для основных продуктов?
PM MAIL   Вверх
ZBugz
Дата 24.3.2011, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Racer @ 23.3.2011,  23:59)
кстати, а как обновить саму обновлялку? как заменить ее файл? использовать батник не хочу. какие есть способы? может они подойдут лучше и для основных продуктов?

Ну вот я выше писал как без батников, с переименованием самого себя на лету и запуска 2-й копии и закрытие первой после переименования.
PM MAIL   Вверх
Racer
Дата 24.3.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009

Репутация: нет
Всего: нет



немного не понял как переименовать самого себя на лету?


PM MAIL   Вверх
ZBugz
Дата 24.3.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Racer @ 24.3.2011,  15:23)
немного не понял как переименовать самого себя на лету?

Ну запущенная программа переименовывает само свой exe не выходя из программы smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.