Подскажите, плз. Пишу инсталлятор ( на дельфе ). Проблема, надо в ходе инсталляции запускать ряд приложений, причём, запускать хотелось бы последовательно, т.е. одно установилось, запускаем на установку другое. Проблема: как узнать установилось ли приложение. Например, в ходе инсталляции программы надо установить ( Framework, DirectX, и д.р ). Запускаем framework через ShellExecute(.....), получаю из неё "return value is the instance handle of the application that was run", что можно зделать? Как, например, по handle, отследить завершение программы?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
31-05-2007 00:36 | Комментарий к предыдущим ответам
Люди! Пыталась сделать и первым и вторым способом - никак!
У меня 2 еxe-файла. Должны запускаться последовательно и пока один не закончится, второй не должен запускаться. И пока второй не закончит свою работу - программа не должна продолжаться. они запускаются, но почему-то не выполняют своих действий. Такое ощущение, что сразу после запуска их останавливают! Как быть? Может объясните, что происходит внутри функций?
При этом способе возникает проблемка, пока не закончит работу запущенный процесс наше приложение не перерисовывается и всё-такое, а очень не хотельсь бы, чтобы оно совсем в это время помирало. Можно ли это как-нибудь обойти
var
s: TShellExecuteInfo;
begin
Zeromemory(@S,SizeOf(S));
S.cbSize := SizeOf(S);
S.fMask := SEE_MASK_NOCLOSEPROCESS;
S.lpFile := 'dx90_redist.exe';
S.nShow := SW_SHOWMAXIMIZED;
if ShellExecuteEx(@S) then
begin
WaitForSingleObject(S.hProcess,INFINITE);
ShowMessage('Ok!');
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.