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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2012, 09:21   #1
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию Запуск и контроль чужой программы

Доброго всем времени! Неподскажите как можно запустить чужую программу выделить ей память и при завершении работы моей программы чужая тоже завершалась т.е уничтожалась бы выделенная память при закрытии моей то естественно чужая завершалась бы тоже. Может как то через процессы запущенные CreateProcess но тоже неподходит чужая программа так и остается загружена когда мою убивают, WinExec и ShellExecute вообще отпадают.
Контроль через системные соообщения тоже неподошло, WM_CLOSE и WM_DESTROY неловится при принудительном завершении моей программы.
Заранее спасибо!

Последний раз редактировалось Aliens_wolfs; 29.08.2012 в 09:28.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.08.2012, 10:30   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

про контроль советую почитать про Jobs.
а вот про завершение вместе с вами, к сожалению не знаю..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.08.2012, 10:31   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

хм.. CreatePocess потом WaitForSingleObject(ждите когда созданНый процесс отработает),
затем в OnCloseQuerty сами посылаем WM_DESTROY или TerminateProcess процессу, поток сам закроется(этого сами ждем) и потом Action:=caFree.

Последний раз редактировалось Человек_Борща; 29.08.2012 в 10:51.
Человек_Борща вне форума Ответить с цитированием
Старый 29.08.2012, 10:43   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Спасибо за советы! ждать процесс WaitForSingleObject и когда запустится WaitForInputIdle у меня это работает, но меня интересует на оборот, когда мою программу принудительно завершат убьют мой процесc чтобы и чужая завершилась.
При принудительном завершении не срабатывает сообщение WM_DESTROY
Думаю попробовать через DuplicateHandle унаследовать чужой дескриптор потом когда мой убьют дескриптор то чужой должен закрыть программу так как дублируются

Последний раз редактировалось Aliens_wolfs; 29.08.2012 в 11:10.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.08.2012, 10:53   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

При TerminateProcess вы ничего из ring3 не сделаете для себя.

Возможно при CreateProcess нужно указать создавать CHILD процесс по отношению к вам, есть мнение что если убить родительский, то все порожденные от него, тоже вымрут.
Человек_Борща вне форума Ответить с цитированием
Старый 29.08.2012, 10:57   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Тоже пробовал создавал родительский нывышло, все равно загружена чужая когда мою убивают, думаю тут может как то память выделить ее сделать общей для своей и для чужой, когда одного завершат память потеряет структуру будет ошибка и они оба завершатся.
В общем как то нужно прикрутить чужую программу к своей как будто один процесс, чтобы была двусторонняя зависимость на уничтожение

Последний раз редактировалось Aliens_wolfs; 29.08.2012 в 11:14.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.08.2012, 11:14   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Стандартный загрузочник сам распределяет процессы по разным облостям памяти.
Есть мнение что вам нужно копать в сторону запуска из памяти, читайте/ищите инфу об этом.
В любом случае придется делать тоже, что делает загрузочник.
Человек_Борща вне форума Ответить с цитированием
Старый 29.08.2012, 11:24   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://www.delphilab.ru/content/view/18/46/
глава 5, почитайте, может найдете что полезного.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.08.2012, 11:29   #9
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Спасибо за советы!!! Буду искать и разбираться дальше.
За книгу отдельное спасибо много полезного и то что нужно!

Последний раз редактировалось Aliens_wolfs; 29.08.2012 в 12:22.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Запуск чужой программы JonMagon Помощь студентам 9 19.08.2011 14:18
Запуск чужой программы как сервиса Человек_Борща Общие вопросы Delphi 9 08.02.2011 13:44
Как реализовать запуск и контроль нескольких однотипных потоков. Son Общие вопросы Delphi 5 29.04.2010 08:40
Текст из RichView чужой программы W0LF Общие вопросы Delphi 4 20.02.2010 17:12
Запуск своего модуля из чужой программы Volkogriz Общие вопросы Delphi 7 16.10.2007 05:19