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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2015, 10:09   #1
hooko
Пользователь
 
Аватар для hooko
 
Регистрация: 04.05.2012
Сообщений: 13
По умолчанию Как создать независимый процес в Delphi?

Привет! Суть такова: есть некоторое приложение, после закрытия которого необходимо изменить несколько файлов с которыми оно работает. Во время работы приложения этого сделать не возможно - они "защищены" им - пока работает приложение . Я мог бы написать отдельную тулзу для этого, но не могу по некоторым соглашениям с др. участниками проекта.

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

Я пробовал исполнить это потоками, но они зависят от той программы, которая его создала - после завершения программы завершался поток.
Возможно ли это? Как это реализовать? В какую сторону "копать"?

p.s. Может в моем приложении сделать некий дамп будущей программы которая будет делать изменения в файлах приложения, а потом собрать из него exe и запустить в памяти? Хотя, наверно на подобные действия будет "орать" антивирус...
Самое потрясающее достижение программного обеспечения состоит в том, что оно способно уничтожить стабильность и любые достижения аппаратного обеспечения.
(Henry Petroski)

Последний раз редактировалось hooko; 20.08.2015 в 10:18.
hooko вне форума Ответить с цитированием
Старый 20.08.2015, 11:30   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Начните отличать потоки от процессов.
Пускай ваше приложение реализует обменн данными через IPC (In-Process-Communication) и каждая копия выполняет свою задачу и передает инфу серверу:
file.exe - хост
file.exe -network -обмен данными по сети
file.exe -render -рисование и буфферизация картинок для конечной отрисовки на хосте.

таким образом пользователь видит только хост-приложение с окнами, а само приложение состояит из изолированных процессов, где каждый занят чем-то одним. Так работает например chrome. Есть рендер, есть процесс кэша, есть процесс расширений, есть для модулей. Кароче Он очень удачно и интересно спроектирован.
Человек_Борща вне форума Ответить с цитированием
Старый 20.08.2015, 12:36   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после закрытия которого необходимо изменить несколько файлов с которыми оно работает.
Напиши свое приложение, которое через CreateProcess() будет запускать то. В своем приложении после вызова этой функции используй WaitForSingleObject(), чтоб приложение подождало, пока второе не завершит свою работу, и тогда можно уже изменять что ты там хочешь. Т.е. вызвав WaitForSingleObject твое приложение замрет, пока второе не завершится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2015, 12:11   #4
hooko
Пользователь
 
Аватар для hooko
 
Регистрация: 04.05.2012
Сообщений: 13
По умолчанию

Ok. Попробую сказать иначе. Представьте некоторую процедуру в моей программе, которая будет выполняться отдельным независимым процессом. Такое возможно?
Самое потрясающее достижение программного обеспечения состоит в том, что оно способно уничтожить стабильность и любые достижения аппаратного обеспечения.
(Henry Petroski)
hooko вне форума Ответить с цитированием
Старый 22.08.2015, 13:51   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Попробую сказать иначе
Да, если твоя программа - DLL.
Впрочем ты уж слишком сильно переиначил.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2015, 17:09   #6
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от hooko Посмотреть сообщение
Представьте некоторую процедуру в моей программе, которая будет выполняться отдельным независимым процессом. Такое возможно?
Если знать адрес этой процедуры, то можно с другого процесса создать удаленный поток, который выполнит процедуру. Функция WinAPI CreateRemoteThread.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 24.08.2015, 10:23   #7
hooko
Пользователь
 
Аватар для hooko
 
Регистрация: 04.05.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Если знать адрес этой процедуры, то можно с другого процесса создать удаленный поток, который выполнит процедуру. Функция WinAPI CreateRemoteThread.
Вот Оно! Это уже ближе к моему. Насколько понимаю, без инжекта в процесс не обойтись?
Самое потрясающее достижение программного обеспечения состоит в том, что оно способно уничтожить стабильность и любые достижения аппаратного обеспечения.
(Henry Petroski)
hooko вне форума Ответить с цитированием
Старый 24.08.2015, 18:04   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Просто описать в одном приложении функцию как:
Код:
function RemoteThreadProc(p: Pointer); DWord; stdcall;
а с другого приложения создавать удаленный поток на эту функцию через CreateRemoteThread.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
демон на php, убить дочерний процес после того как он сделал то нчо от него требуется dem66 PHP 0 27.10.2012 16:54
Процес в Delphi RuVarez Общие вопросы Delphi 1 02.09.2010 15:09
Независимый проект Pro100Chel Общие вопросы C/C++ 17 18.06.2010 23:12
Как сделать, чтобы процес небыло видно в Диспетчере задач? HunterMan Win Api 1 25.06.2008 21:34
Delphi 7 перестал выполнять процес компиляции!!! aesoem Общие вопросы Delphi 5 07.04.2008 10:44