Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 17:00   #1
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
Восклицание Завершение работы сторонней программы

Доброго времени суток всем.
Имеется задача:
Дано - приложение А.exe
Необходимо - из приложения В.exe сделать корректное завершение приложения А.exe
Операционка - XP SP3
Среда программирования - Delphi
Кто подскажет - как сие можно сделать?
Перерыл весь интернет - никаких идей.
AnryKZKZ вне форума Ответить с цитированием
Старый 12.05.2014, 17:18   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

что значит "корректное"?
можете послать что надо бы закрыться, а как оно там будет ...
eval вне форума Ответить с цитированием
Старый 12.05.2014, 17:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Если А не поддерживаем прием команд посредством message или типа как это сделано в службах (команда остановки службы) то корректно не получится.
Вышибание TerminateProcess - максимум чего добъешься. но это грязное завершение, сродни вышибанию из диспетчера задач.
Что делает приложение А?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2014, 21:36   #4
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
Восклицание

Программа А считывает состояние экрана и отправляет его на ftp-сервер. Этакое слежение за рабочим столом. Программа В должна производить обновление программы А. Как я понимаю - программа В считывает с ftp-сервера файл update.txt и если там указана новая версия программы A - то производит ее считывание во временную папку, делает завершение старой программы А, производит перезапись программы А и осуществляет ее запуск (может быть просто запуск программы А с последующей передачей ей управления либо просто посредством перезагрузки компа).
Если не сложно - приведите код, на который можно опереться. Как программе А сообщить что она должна закрыться и если она не отрабатывает данное сообщение - просто "вынести" ее...

Последний раз редактировалось AnryKZKZ; 12.05.2014 в 21:38.
AnryKZKZ вне форума Ответить с цитированием
Старый 12.05.2014, 21:52   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Если речь о реализации чисто авто-обновления, то можно обойтись без второй программы. Если программа обнаруживает в интернете обновление, то она его скачивает во временный каталог, запускает и сама закрывается. Скаченное обновление копирует себя в основной каталог, запускает себя из основного каталога, и закрывается. Запустившись из основного каталога программа сверяет свою версию, и версию во временном каталоге, и если они совпадают, то временной каталог очищается. Апдейт завершён. Изначально все эти алгоритмы проделываются в OnCreate формы, и на экране ничего не будет видно до окончания обновления.
doktor255 вне форума Ответить с цитированием
Старый 12.05.2014, 21:56   #6
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
По умолчанию

Как процесс сам себя закрывает - оно понятно. А как он (закрытый процесс) копирует себя в основной каталог? И со всем остальным - не совсем понятно. Можете привести код?
AnryKZKZ вне форума Ответить с цитированием
Старый 12.05.2014, 21:59   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Как программе А сообщить что она должна закрыться и если она не отрабатывает данное сообщение - просто "вынести" ее...
Без знаний о том как программа устроена?
Никто тебе не скажет.
Можно использовать это:
http://delphiworld.narod.ru/base/ter..._else_app.html
http://delphiworld.narod.ru/base/kill_active_app.html
Если программа имеет окно.

Или это:
http://delphiworld.narod.ru/base/kill_nt_task.html

Можешь поискать примеры с CreateToolhelp32Snapshot(), которая получает список приложений. Она же даст ID приложения, которое будешь завершать функцией TerminateProcess().
Или примеры работы с PsAPI, что моднее сегодня.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2014, 22:03   #8
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
По умолчанию

А если применительно к авто-обновлению программы? как реализовывается код? где поискать-почитать?
AnryKZKZ вне форума Ответить с цитированием
Старый 12.05.2014, 22:09   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

пример (c) raxp - "Батник обновления программы из Интернета"

(в принципе и всё тему можно почитать...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 22:09   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от AnryKZKZ Посмотреть сообщение
А как он (закрытый процесс) копирует себя в основной каталог?
Сначала копирует, затем запускает скопированную копию, и только потом себя закрывает. Последовательность операций на бумаге напиши, и сразу всё станет понятно.
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
завершение работы программы oranger Помощь студентам 2 25.06.2012 22:51
Завершение работы программы нажатием ESC whatever Помощь студентам 0 30.04.2012 00:07
Завершение работы программы без формы FaTaL Общие вопросы Delphi 5 21.06.2011 09:55
При завершение работы программы появляется окно Microsoft Visual C++ Debug Library TheWanderer Visual C++ 2 25.11.2008 00:27
Завершение работы чужой программы Viteef Win Api 12 24.09.2007 12:31