Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Mik92
2 / 2 / 0
Регистрация: 26.08.2014
Сообщений: 135
1

CreateProcess Delphi

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

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

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

Размер: 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
Дайте пожалуйста код для открытия файла с помощью CreateProcess. Файл...

CreateProcess и java
возникла проблема с запуском джавы. через бат файл запускается. start javaw...

CreateProcess не запускает программу
Прочитал умную статью, что мол надо использовать исключительно CP для запуска...

Запуск через CreateProcess
Как запустить программу через CreateProcess и передать параметры запуска ?...

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

7
BOGG ART
577 / 445 / 146
Регистрация: 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
Убежденный
Ушел с форума
Эксперт С++
15999 / 7270 / 1180
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
10.02.2016, 19:36 4
Лучший ответ Сообщение было отмечено Mik92 как решение

Решение

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
пофигист широкого профиля
3424 / 2324 / 630
Регистрация: 15.07.2013
Сообщений: 13,753
11.02.2016, 01:06 6
Цитата Сообщение от Mik92 Посмотреть сообщение
Помогло но недостаток который я пытался устранить так и не устранился. Как можно запустить из х32 битного приложения х64 битное? (на х64 битной ОС) Я думал проблема была в том что этот процесс запускался как дочерний так как если обычно запустить приложение тогда он работает а если через createprocess тогда нет.
Меня лично смущает при чем тут cmd.exe?
0
Убежденный
Ушел с форума
Эксперт С++
15999 / 7270 / 1180
Регистрация: 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, нажатие клавиши
Как передать дочерней программе нажатую клавишу. П.с. дочерняя программа,...

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

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


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

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

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