Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Mik92
2 / 2 / 0
Регистрация: 26.08.2014
Сообщений: 135
#1

CreateProcess Delphi - Delphi

10.02.2016, 19:01. Просмотров 1365. Ответов 7

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

Название: Screenshot_1.png
Просмотров: 103

Размер: 2.2 Кб

Запускаю так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function CreateProc(const FileName, Params: string; WindowState: Word): Boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  CmdLine := '"' + FileName + '"' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do
  begin
    cb:= SizeOf(SUInfo);
    dwFlags:= CREATE_NO_WINDOW;
    wShowWindow:= WindowState;
  end;
 
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False, CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(FileName)), SUInfo, ProcInfo);
end;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2016, 19:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос CreateProcess Delphi (Delphi):

CreateProcess - Delphi
Дайте пожалуйста код для открытия файла с помощью CreateProcess. Файл находится в папке с программой \kart.exe

CreateProcess и java - Delphi
возникла проблема с запуском джавы. через бат файл запускается. start javaw -Xmx512m -Djava.library.path=%APPDATA%/.minecraft/bin/natives...

Ошибка при CreateProcess - Delphi
Требуется осуществить перехват вывода консоли в Memo. Нашел тройку процедур в интернете для осуществления сей задачи, но во всех троих...

CreateProcess - не дожидается окончания - Delphi
Здравствуйте, подскажите в чем проблема, я написал чтобы после завершения процесса выполнялась другая процедура расчета, но почему-то не...

Запуск через CreateProcess - Delphi
Как запустить программу через CreateProcess и передать параметры запуска ? Если нужно исходник выложу!

CreateProcess, нажатие клавиши - Delphi
Как передать дочерней программе нажатую клавишу. П.с. дочерняя программа, написанная на C++, запущена createprocess'ом родительской...

7
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
10.02.2016, 19:04 #2
А зачем так делать? Тот что, как-то не так работает из-за этого?
0
Mik92
2 / 2 / 0
Регистрация: 26.08.2014
Сообщений: 135
10.02.2016, 19:20  [ТС] #3
Цитата Сообщение от BOGG ART Посмотреть сообщение
А зачем так делать? Тот что, как-то не так работает из-за этого?
Да, есть небольшой недостаток
0
Убежденный
Ушел с форума
Эксперт С++
15937 / 7247 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
10.02.2016, 19:36 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
UpdateProcThreadAttribute
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

См. флаг PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.

Либо более простой и переносимый способ: запустить промежуточный процесс, из
него породить потомка и завершиться. Потомок в дереве процессов будет сиротой
"orphaned process".
2
Mik92
2 / 2 / 0
Регистрация: 26.08.2014
Сообщений: 135
11.02.2016, 00:57  [ТС] #5
Цитата Сообщение от Убежденный Посмотреть сообщение
UpdateProcThreadAttribute
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
См. флаг PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.
Либо более простой и переносимый способ: запустить промежуточный процесс, из
него породить потомка и завершиться. Потомок в дереве процессов будет сиротой
"orphaned process".
Помогло но недостаток который я пытался устранить так и не устранился. Как можно запустить из х32 битного приложения х64 битное? (на х64 битной ОС) Я думал проблема была в том что этот процесс запускался как дочерний так как если обычно запустить приложение тогда он работает а если через createprocess тогда нет.
0
northener
пофигист широкого профиля
3243 / 2295 / 496
Регистрация: 15.07.2013
Сообщений: 13,529
11.02.2016, 01:06 #6
Цитата Сообщение от Mik92 Посмотреть сообщение
Помогло но недостаток который я пытался устранить так и не устранился. Как можно запустить из х32 битного приложения х64 битное? (на х64 битной ОС) Я думал проблема была в том что этот процесс запускался как дочерний так как если обычно запустить приложение тогда он работает а если через createprocess тогда нет.
Меня лично смущает при чем тут cmd.exe?
0
Убежденный
Ушел с форума
Эксперт С++
15937 / 7247 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
11.02.2016, 08:56 #7
Цитата Сообщение от Mik92 Посмотреть сообщение
Как можно запустить из х32 битного приложения х64 битное?
Напрямую - никак, насколько я знаю.
Потому что дочернее 64-битное приложение не сможет правильно унаследовать
контекст (переменные окружения, например) своего родителя.
1
Mik92
2 / 2 / 0
Регистрация: 26.08.2014
Сообщений: 135
11.02.2016, 15:56  [ТС] #8
Цитата Сообщение от northener Посмотреть сообщение
Меня лично смущает при чем тут cmd.exe?
Это просто для примера, на самом деле пытаюсь запустить х64 битную консоль собранную на С++ из х32 битного приложения написанного на паскале.

Цитата Сообщение от Убежденный Посмотреть сообщение
Напрямую - никак, насколько я знаю.
Потому что дочернее 64-битное приложение не сможет правильно унаследовать
контекст (переменные окружения, например) своего родителя.
По этому я думал проблема была в том что процесс создавался как дочерний. Теоретически должно работать если процесс не будет дочерним но и тут что то не ладно.
0
11.02.2016, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2016, 15:56
Привет! Вот еще темы с ответами:

Пробелы в имени файла (CreateProcess) - Delphi
Здравствуйте. Нужно запаковать файл в архив и по завершению архивирования подключиться к базе. Проблема в том что в пути к архиватору и...

Как скрыть окно createprocess - Delphi
вопрос заключается непосредственно в название темы пробовал так: var SI: TStartupInfo; begin SI.wShowWindow:= 0; ...

Вырубание дочернего процесса CreateProcess - Delphi
И так я запускаю программу через CreateProcess и дальше программа следит за запущенным процессом и через определенное время надо выключать...

Запустить консольное приложение CreateProcess - Delphi
Мне необходимо запустить консольное приложение с некими параметрами. делаю так: procedure start(name,par:string); var Rlst:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru