如何在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"
我是运行一个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"