等待ShellExecute执行之前?

Mar*_*lka 8 delphi shellexecute delay

我有一个希望很快的问题:是否有可能延迟执行ShellExecute一点?

我有一个autoupdater应用程序.在下载所有必需的文件等之后,它会将当前文件重命名为*.OLD,将新文件重命名为之前的文件.很简单.但后来我需要删除那些.OLD文件.这个'清理'程序在MainForm.OnActivate上执行(检查它是否是第一个激活proc).但这显然发生得太快(我从DeleteFile得到False).这是程序:

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;
Run Code Online (Sandbox Code Playgroud)

此过程应该重新启动应用程序.我确定删除问题是由第二个应用程序的快速启动引起的,因为如果我自己重新启动它,给它一点时间,文件会被正常删除.

tl; dr版本:我需要调用ShellExecute()等待(0.1秒左右)然后THEN执行命令.

注意

我尝试使用-ping命令尝试延迟它,但它没有用.

非常感谢你提前

编辑:改述

我需要这个发生|| 第一个应用关闭; 等待100毫秒; 第二个应用程序打开 ||.我需要先调用ShellExecute,然后等待调用应用程序完全关闭,然后执行shell(即打开第二个应用程序)

use*_*016 5

你正在做一个autopatcher吗?

我遇到了同样的问题,这就是我绕过它的方式:

你使用参数"--delay"运行第二个应用程序或类似的东西.第二个应用处理参数"--delay"并休眠100毫秒,然后继续正常运行.

  • 如果您同时将WTV文件复制到外部硬盘怎么办?然后100毫秒可能是不够的,你仍然失败.基于`WaitForSingleObject`的解决方案更好.或者,第二个应用程序可以在启动时执行"未完成睡眠(100)"或类似的操作. (4认同)