У меня, надеюсь, быстрый вопрос: возможно ли немного задержать выполнение ShellExecute?
У меня есть приложение с автообновлением. После загрузки всех необходимых файлов и т. Д. Он переименовывает текущие файлы в * .OLD, а новые - в предыдущие. Достаточно просто. Но тогда мне нужно удалить эти .OLD файлы. Эта процедура «очистки» выполняется в MainForm.OnActivate (с проверкой, является ли это первым активным процессом). Но это, видимо, происходит слишком быстро (я получаю False из DeleteFile). Это процедура:
procedure TUpdateForm.OKBtnClick(Sender: TObject);
const SHELL = 'ping 127.0.0.1 -n 2';
begin
ShellExecute(0,'open',pchar(SHELL+#13+Application.ExeName),nil,nil,SW_SHOWNORMAL);
Application.Terminate;
end;
Эта процедура должна перезапустить приложение. Я уверен, что проблема удаления вызвана быстрым запуском второго приложения, потому что, если я перезапущу его сам, уделив ему немного времени, файлы будут удалены нормально.
tl; dr версия: мне нужно вызвать ShellExecute (), которая немного подождет (0,1 с или около того), а затем выполнит команду.
Примечание
Я пытался использовать команду -ping, чтобы попытаться отложить ее, но она не сработала.
Большое спасибо заранее
Редактировать: Перефразировано
Мне нужно, чтобы это произошло || Первое приложение закрывается; Подождите 100 мс; открывается второе приложение ||. Мне нужно сначала вызвать ShellExecute, затем подождать, пока вызывающее приложение полностью закроется, а затем выполнить оболочку (то есть открыть второе приложение)