Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизShellExecute - ожидание завершения. Найти похожие ветки
← →
Новичек © (2007-05-16 07:08) [0]Уважаемые Мастера, посоветуйте, пожалуйста, как определить, что функция ShellExecute с параметром SW_HIDE завершила свою работу?
Спасибо.
← →
MBo © (2007-05-16 07:21) [1]CreateProcess используй
← →
PZ (2007-05-16 07:47) [2]Можно, также, использовать функцию FileExecuteWait из библиотеки RxLib
← →
Новичек © (2007-05-16 07:57) [3]2 MBo:
Не знаю, как использовать её с дополнительными параметрами в командной строке (типа "proga.exe extended parameter") :-(
2 PZ:
Спасибо, про эту библиотеку я и не вспомнил.
← →
MBo © (2007-05-16 08:18) [4]>Не знаю, как использовать её с дополнительными параметрами в командной строке (типа "proga.exe extended parameter")
хм, не вижу проблем
← →
Новичек © (2007-05-16 08:29) [5]2 MBo:
Делаю так:
CreateProcess("proga.exe", "extended", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Что-то уж больно быстро завершается, практически мгновенно :-)
Нормальная продолжительность выполнения - секунд 20.
← →
MBo © (2007-05-16 09:00) [6]поля StartUpInfo, ProcessInfo заполнил? Пример есть в FAQ
всю командную строку можно вторым параметром передавать.
← →
Джо © (2007-05-16 09:05) [7]> [5] Новичек © (16.05.07 08:29)
> Делаю так:
> CreateProcess("proga.exe", "extended", nil, nil, false,
> NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo)
> Что-то уж больно быстро завершается, практически мгновенно
1. Структура StartUpInfo должна быть инициализированы должным образом. В коде этого не видно.
2. Функция CreateProcess НЕ ожидает завершения процесса. Вместо этого нужно использовать WaitForSingleObject и передавать ей хендл ново-созданного процесса.
3. Вызывая функции, следует проверять возвращаемое ими значение.
В данном случае, схематично будет выглядеть так:var
StartUpInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
...
ZeroMemory(@StartUpInfo,Sizeof(StartUpInfo));
StartUpInfo.cb := Sizeof(StartUpInfo);
if not CreateProcess (..., StartUpInfo, ProcessInfo) then
raise LastOSError;
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
В таком роде.
← →
Новичек © (2007-05-16 09:21) [8]Необходимые структуры я заполнял.
Поэкспериментировал с параметрами, заработало вот с такими:
Proga := CreateProcess(nil, "Proga.exe extended", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Спасибо огромное, Мастера.
С уважением, Сергей.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c