try语句中怎么在发生错误时重试

try语句中如何在发生异常时重试
想要实现以下效果
try
     处理文件。。。。。代码
 except
        on E: Exception do
        begin
          li_rtn := MessageBox(self.Handle, pchar(e.Message), '安装错误', MB_ABORTRETRYIGNORE);
          if li_rtn=IDRETRY then //重试
          begin
                 回到处理文件代码处继续处理
          end;
       end;
end;


就是在文件处理是发生异常,比如在文件被占用,这时候可以让用户接触占用重新回到文件处理代码再次执行。

原以为可以通过label,然后goto来实现,结果编译会报:'GOTO LBegin' leads into or out of TRY statement 的错误。

在Try里如何实现重试的代码呢?谢谢
------解决思路----------------------
用repeat  ...   until xxxx ,包绕在 try except end 周围
------解决思路----------------------
用一个变量保存一下是否Try成功,如果成功跳出循环,否则一直循环比如
BOk := false;
while not BOK do
begin
   try
      dosomething;
      BOk := true;
   except
   end;
end;