Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.057 c
6-1281946428
PonosetcDM
2010-08-16 12:13
2017.01.15
Indy в Internet


15-1452461404
Юрий
2016-01-11 00:30
2017.01.15
С днем рождения ! 11 января 2016 понедельник


3-1311236769
yurikon
2011-07-21 12:26
2017.01.15
Метод TADODataSet.Seek


2-1421233871
aka
2015-01-14 14:11
2017.01.15
самый быстрый вывод текста


15-1456097809
Kerk
2016-02-22 02:36
2017.01.15
Работа стоя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский