Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
1

Запуск приложения и ожидание завершения

04.03.2014, 16:27. Показов 3237. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вечер добрый.
Собственно сабж. Нужно запустить приложение и отловить его завершение.
Использовал данную ф-ию
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function ExecAndWait(const FileName,     // Запуск процесса
                     Params: ShortString; // и ожидание его завершения
                     const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками}
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end;
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
  { Ожидаем завершения приложения }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
Но сейчас необходимо сделать так, что бы моя программа не "зависала" во время ожидания завершения запущенного процесса. Возможно ли это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 16:27
Ответы с готовыми решениями:

Запуск приложения через CreateProcess и ожидание его завершения
В общем, суть в следующем: нужно, чтобы программа запускала консольное приложение DD под windows,...

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

Запуск внешнего скрипта и ожидание его завершения
поможите советом, а лучше кодом )) мне нужно запустив скрипт (VBS) отследить его PID в процессах и...

ShellExecuteEx, WaitForSingleObject, Ожидание завершения работы другого приложения
добрый вечер. итак, задача (которую я решил благодаря CyberForum.ru :)), следующая: необходимо...

6
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
04.03.2014, 16:44 2
Можно костыль приделать:
Delphi
1
2
while WaitForSingleObject(ProcInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
или в отдельный поток вынести.
1
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
04.03.2014, 16:59  [ТС] 3
Благодарю. На данном этапе то, что нужно =)
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.03.2014, 17:01 4
или юзать MsgWaitForMultipleObjects[Ex] - это лучший из универсальных костылей на все случАи
0
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
23.03.2014, 12:00  [ТС] 5
После завершения отладки некоторых важных для меня функций решил вернуться к этой проблеме. При попытке закрыть мое приложение(во время работы приложения запущенного с помощью функции из первого поста) вылетает ошибка на следующие строки:
Delphi
1
2
3
4
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation; // тут
  CmdLine: ShortString;
Delphi
1
2
3
4
5
6
7
  if Result then
  begin
    while WaitForSingleObject(ProcInfo.hProcess, 50) <> WAIT_OBJECT_0 do // и тут
    Application.ProcessMessages;
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
05.07.2014, 20:02 6
Функция, указанная в посте #1, работает хорошо с доработкой. Однако, подскажите, где описывать опцию показа окна запускаемого процесса?
Я сразу напал на запись объекта wShowWindow, но в хелпе о ней ни строчки, и предлагаемые константы ws... какие-то не те. Нужно сделать окно видимым. Спасибо!
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
05.07.2014, 20:17 7
wSbowWtndow Определяет как должно выглядеть окно запущенного приложения. В этот элемент можно записать любой из идентификаторов типа SW_*

КонстантаОписание
SW_HIDEСкрывает окно.
SW_MAXIMIZE Разворачивает окно.
SW_MINIMIZE Сворачивает окно.
SW_SHOWMAXIMIZED Активизирует и разворачивает окно.
SW_SHOWMINIMIZED Активизирует и сворачивает окно.
SW_SHOWNORMALАктивизирует и показывает окно в состоянии, определяемым самим приложением.

http://www.delphirus.com/article32.html
1
05.07.2014, 20:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2014, 20:17
Помогаю со студенческими работами здесь

Ожидание завершения копирования
Привет! Вот я таким образом копирую файлы CopyFile('C:\video.avi', 'D:\video.avi', false); ...

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

Ожидание завершения потоков
Подскажите пж. как дождатся окончание выполнения потоков в unit-2 и потом продолжить в unit-3 чет...

Ожидание завершения работы потоков
допустим есть программа, которая многопоточно отправляет get запросы через idhttp сначала на первый...

Запуск приложения и ожидание его завершения
Имеется приложение ( консольное, не требует каких-либо действий от пользователя и завершается...

Запуск и ожидание завершения другой программы
Есть такой несложный код, опубликованный на винграде еще лет десять назад: Private Sub...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru