Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизЗапуск двух программ с ожиданием завершения Найти похожие ветки
← →
AlexeyTG (2014-12-17 22:08) [0]Всем привет! Сам не программист, давно ушел в другую сферу ИТ. Потребовалось написать программку, которая запускает одно приложение и по завершению его запускает второе. На данный момент сделал так
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, shellapi;
begin
try
ShellExecute(0, "open", "C:\Prog1.exe", "/Param", nil, 0);
Sleep(1000);
ShellExecute(0, "open", "C:\Prog2.exe", "/Param", nil, 0);
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
end.
Что само с собой очень коряво :(
Просьба выложите текст программки которая будет делать тоже самое, но ждать завершения prog1, и после уже запускать prog2
← →
Ega23 © (2014-12-17 22:23) [1]1. Первой программе передаются параметры запуска второй. перед окончанием своей работы первая сама запускает вторую.
2. Запускающая программа взводит именованный мьютекс и запускает первую программу, после чего уходит в цикл проверки взведённого мьютекса. Первая программа по завершении работы освобождает мьютекс. Запускающая программа выходит из цикла ожидания и запускает вторую программу.
3. Как-нибудь через это http://msdn.microsoft.com/en-us/library/windows/desktop/ms682489%28v=vs.85%29.aspx мониторим, кажется я что-то подобное лет 10 назад делал.
← →
Ega23 © (2014-12-17 22:24) [2]1.2.3 - это не шаги алгоритма, это возможные варианты решения, если чё. :)
← →
AlexeyTG (2014-12-17 22:37) [3]С учетом того, что в последний раз Delphi открывал лет 10 назад, не осилю :( Читал про CreateProcess, WaitForSingleObject но как на готовом софте скомпилировать не знаю. RAD Studio скачал, поставил.
Поэтому прошу готовый исходник, чтобы только имя файла и ключ запуска изменить.
Как вариант запуск calc.exe, при его завершении (закрытие) запуск notepad.exe и закрытие написанной программы
← →
DVM © (2014-12-17 22:40) [4]ShellExecuteEx
← →
MBo © (2014-12-17 22:40) [5]запуск с помощью CreateProcess (или ShellExecuteEx) даст дескриптор процесса, завершения которого можно подождать с помощью Wait** функций (ForSingleObject и т.д.)
В сети можно найти примеры с названиями вроде ExecuteAndWait (как обычно, половина примеров плохие)
← →
MBo © (2014-12-17 22:41) [6]вот и в местном факе есть: http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15
← →
кгшзх © (2014-12-17 23:10) [7]Потребовалось написать программку, которая запускает одно приложение и по завершению его запускает второе.
run-two-programs.bat
← →
AlexeyTG (2014-12-18 11:23) [8]кгшзх BATник не пойдет, нужен именно ЕХЕшник )
← →
Ega23 © (2014-12-18 12:27) [9]
> запуск с помощью CreateProcess (или ShellExecuteEx) даст
> дескриптор процесса, завершения которого можно подождать
> с помощью Wait** функций (ForSingleObject и т.д.)
Во, это ещё проще. "Слона-то я и не приметил".
← →
Dennis I. Komarov © (2014-12-18 15:03) [10]Вырезал кусок:
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := SW_Show;
if CreateProcess(nil, PAnsiChar(ReadString("ARHIVE", "Exec", "")), nil, nil, False, CREATE_NEW_CONSOLE OR NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
WaitForSingleObject(ProcessInfo.hProcess, INFINITE)
else ErrorList.Add(SysErrorMessage(GetLastError));
← →
Кщд © (2014-12-18 15:15) [11]халявщиков-студентов отшиваете
а великовозрастных халявщиков - привечаете
чумачече)
← →
Dennis I. Komarov © (2014-12-18 15:45) [12]
> AlexeyTG (18.12.14 11:23) [8]
> кгшзх BATник не пойдет, нужен именно ЕХЕшник )C:\Users\Денис>cmd.exe /?
Запуск новой копии интерпретатора команд Windows.
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] строка]
/C Выполнение указанной команды (строки) с последующим завершением.
/K Выполнение указанной команды (строки) без последующего завершения.
/S Изменение поведения после /C или /K (см. ниже)
/Q Отключение режима вывода команд на экран (ECHO).
/D Отключение выполнения команд AutoRun из реестра (см. ниже)
/A Вывод результатов выполнения команд в формате ANSI.
/U Вывод результатов выполнения команд в формате UNICODE.
/T:fg Выбор цвета переднего плана/фона (более подробно см. COLOR /?)
/E:ON Разрешение расширенной обработки команд (см. ниже)
/E:OFF Запрет расширенной обработки команд (см. ниже)
/F:ON Разрешение символов завершения имен файлов и папок (см. ниже)
/F:OFF Запрет символов завершения имен файлов и папок (см. ниже)
/V:ON Разрешение отложенного расширения переменных среды с применением
символа "!" в качестве разделителя. Например, /V:ON разрешает
использовать !var! в качестве расширения переменной var во время
выполнения. Синтаксис var служит для расширения переменных
при вводе, что приводит к совсем другим результатам внутри
цикла FOR.
Для продолжения нажмите любую клавишу . . .
← →
AlexeyTG (2014-12-18 16:40) [13]Ок. Всем ОГРОМНОЕ спасибо за ответы и примеры. Буду разбираться, пробовать по данным Вами рекомендациям.
← →
AlexeyTG (2014-12-18 16:53) [14]MBo, Dennis I. Komarov Вам отдельное спасибо за примеры :)
← →
AlexeyTG (2014-12-18 18:55) [15]По данным примерам и рекомендациям написал рабочий код, просьба оценить "корявость" его и сделать замечания по улучшению.
http://delphimaster.net/view/2-1418918004/
← →
кгшзх © (2014-12-18 21:16) [16]BATник не пойдет, нужен именно ЕХЕшник )
кому-то не подойдет, а кто-то не видит никакой разницы.
батник запустит точно такой же процесс как и твой exe.
после createprocess и завершения процесса все что тебе будет известно про него - это гетэкзитпроцесскоде.
который точно так же будет доступен и в батнике.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.089 c