等待执行ShellExecute吗?
|
我有一个希望很快问到的问题:是否有可能稍微延迟ShellExecute的执行?
我有一个带有autoupdater的应用程序。下载所有必需的文件等后,它将当前文件重命名为* .OLD,并将新文件重命名为以前的文件。很简单。但是然后我需要删除那些.OLD文件。此“清理”过程在MainForm.OnActivate上执行(并检查它是否是第一个激活过程)。但这显然发生得太快了(我从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;
该过程应该重新启动应用程序。我确信删除问题是由第二个应用程序的快速启动引起的,因为如果我自己重新启动它,花一点时间,文件将被正常删除。
tl; dr版本:我需要调用ShellExecute()稍等片刻(约0.1秒),然后执行命令。
注意
我尝试使用-ping命令来尝试延迟它,但是它不起作用。
提前非常感谢你
编辑:改写
我需要这种情况||第一个应用程序关闭;等待100毫秒;第二个应用程序打开||。我需要先调用ShellExecute,然后等到调用应用程序完全关闭自身,然后再执行Shell(即打开第二个应用程序)
没有找到相关结果
已邀请:
3 个回复
桔适丛
醒荒捆府绣
这是一些可以检查进程是否存在的代码。所以...当前应用调用更新程序并终止。更新程序可以检查旧应用程序是否已终止并执行其操作(重命名,更新,删除等):
僻朵庙惩竣
代替
,则可以等待处理句柄。当应用程序退出时,将发出处理句柄的信号。例如:
ExecAndWait返回后,您可以根据需要睡眠100毫秒。 N @