如何在Inno Setup中捕获bat文件删除文件的错误信息?

How to catch the error message of bat file for deleting files in Inno Setup?

我是运行一个bat文件,安装完成后CurStep = ssDone执行一些删除操作。如果在指定位置找不到文件和文件夹。它悄无声息地退出。如果文件没有退出或在删除过程中发生任何其他错误,我想显示消息我如何在 Inno Setup 中捕获 bat 文件错误。

批处理文件:

del "C:\archives\pages\*.txt"

代码:

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssDone then
  begin
  log('Test'+ ExpandConstant('{tmp}\deletefiles.bat'))
    Exec(ExpandConstant('{tmp}\deletefiles.bat'), '', '',
         SW_HIDE, ewWaitUntilTerminated, ErrorCode); 
    log('Done')
  end;
end;

一般来说,您应该测试 ErrorCode 的非零退出代码。

但是 Windows del 命令不报告错误,不幸的是:
Batch file and DEL errorlevel 0 issue

如果您想捕获输出,请参阅:
How to get an output of an Exec'ed program in Inno Setup?


如果您可以直接在 Inno Setup Pascal 脚本代码中执行相同操作,则使用批处理文件删除文件无论如何都不是好的解决方案。

procedure CurStepChanged(CurStep: TSetupStep);
var
  FindRec: TFindRec;
begin
  if CurStep = ssDone then
  begin
    if not FindFirst('C:\path\*.txt', FindRec) then
    begin
      Log('Not found any files');
    end
      else
    begin
      try
        repeat
          if DeleteFile('C:\path\' + FindRec.Name) then
          begin
            Log(Format('Deleted %s', [FindRec.Name]));
          end
            else
          begin
            MsgBox(Format('Cannot delete %s', [FindRec.Name]), mbError, MB_OK);
          end;
        until not FindNext(FindRec);
      finally
        FindClose(FindRec);
      end;
    end;
  end;
end;

如果您不需要在 ssDone 步骤中执行此操作 (为什么要这样做?),只需使用 [InstallDelete] section.

[InstallDelete]
Type: files; Name: "C:\path\*.txt"