Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Как по известному Handle программы узнать её расположение на диск   Найти похожие ветки 

 
acsoft   (2004-10-16 10:23) [0]

Вообще задача у меня такая - я знаю имя файла программы, надо обновления периодически загружать. Так вот, если я это обновление загрузил, мне его надо на место старой проги поставить, а старая прога может работать. Надо значит выключить старую и уже потом поверх записать новую версию.
Я думаю так - опросить все Handle"ы запущенных приложений и если соответствующая программа установлена по известному мне адресу, то послать Message на закрытие.

Вообщем, как по известному Handle программы узнать её расположение на диске, ну в смысле имя файла?

Или может можно как-нибудь поэлегантнее? Только надо чтобы замена происходила сразу, вариант с прописыванием в HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce строки "command.com /c del FILENAME.EXE" и тому подобное не катит - нет времени ждать перезагрузки винды.


 
DVM ©   (2004-10-16 12:05) [1]


> Вообщем, как по известному Handle программы узнать её расположение
> на диске, ну в смысле имя файла?

Никак, потому как у программ хэндлов нет.

> Я думаю так - опросить все Handle"ы запущенных приложений
> и если соответствующая программа установлена по известному
> мне адресу, то послать Message на закрытие.

Можно перебрать все запущенные процессы и выделить нужный, можно перебрать окна и найти нужное, но Message послать можно только окну. Убить процесс - TerminateProcess().

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


 
acsoft ©   (2004-10-16 12:14) [2]

Да, неправильно выразился.

Проблема в том, что приложение без окна - объяснять юзеру, что надо открывать Диспетчер, искать процесс... Да не, проблема с потерей данных это другая проблема.

Хорошо а как перебрать процессы, как найти именно мою программу? Есть, положим, такая-то программа, я знаю её имя файла - как её найти в процессах?


 
DVM ©   (2004-10-16 12:16) [3]

http://delphiworld.narod.ru/base/is_exe_running.html


 
acsoft ©   (2004-10-16 13:29) [4]

Ага, спасибо, все супер.

Правда только с десятого раза дошло, что вместо
OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PIDArray[I]);в моем случае надо
OpenProcess(PROCESS_ALL_ACCESS, False, PIDArray[i]);

Ладно, вроде пашет...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.039 c
14-1097459038
Думкин
2004-10-11 05:43
2004.10.31
С днем рождения! 11 октября


1-1098190193
Riki
2004-10-19 16:49
2004.10.31
Формулы в RichEdit


14-1097344110
maxz
2004-10-09 21:48
2004.10.31
глюки Delphi 8


1-1098072922
md5 hash
2004-10-18 08:15
2004.10.31
Объекты в StringGrid


8-1089988038
gdima
2004-07-16 18:27
2004.10.31
Video





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский