Inno Setup:如何在安装过程中中止/终止设置?

PM2*_*PM2 18 installer inno-setup

在我安装过程中,我运行了一个bat文件.如果bat文件返回错误,我需要中止/终止设置.我想让它MsgBox告诉用户发生了什么,然后让中止看起来像用户按下取消按钮.

是否可以中止/终止设置?

代码示例将非常感激.

[Run]
Filename: {tmp}\test.bat; WorkingDir: {tmp}; Flags: waituntilterminated runhidden
Run Code Online (Sandbox Code Playgroud)

小智 30

谢谢罗伯特.当脚本检测到无法继续安装时,这是一个常见问题.但是,您的解决方案存在问题.WizardForm.Close调用取消对话框,仅当用户回答"是"时才会停止安装.要明确退出,我们应该调用CancelButtonClick.

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall

[Code]
var CancelWithoutPrompt: boolean;

function InitializeSetup(): Boolean;
begin
  CancelWithoutPrompt := false;
  result := true;
end;

procedure MyAfterInstall();
begin
  (Do something)
  if BadResult then begin
    MsgBox('Should cancel because...',mbError,MB_OK)
    CancelWithoutPrompt := true;
    WizardForm.Close;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID=wpInstalling then
    Confirm := not CancelWithoutPrompt;
end;
Run Code Online (Sandbox Code Playgroud)


Rob*_*ove 12

问题是[Run]在安装过程成功完成后发生.所以你现在无法取消,你只能卸载.也[Run]不允许您获取退出代码.

所以你有几个选择.

使用事件: procedure CurStepChanged(CurStep: TSetupStep);

并调用{tmp}\test.batusing Exec或者ExecAsOriginalUser两者都返回ResultCode.然后,您可以提示用户卸载.

但是我认为执行取消会更容易.

为此,请AfterInstall在项目的最后一个文件上创建一个事件.并从此事件中执行程序,因为您可以从此事件中取消.

下面是一些示例代码,展示了如何完成它.

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall

[Code]
procedure MyAfterInstall();
var
 ResCode : Integer;
begin
 if Exec(ExpandConstant('{tmp}') + '\test.bat',
         '', SW_HIDE, ewWaitUntilTerminated, ResCode) then
 begin
   { Program Ran successfully ResCode now contains exit code results }

   { if Exit was 10 then Cancel Installation. }
   if ResCode = 10 then
   begin
      WizardForm.Close;
   end;       
 end
 else
 begin
   { Problem running Program }
   MsgBox('Error', SysErrorMessage(ResCode), mbError, MB_OK);
 end;

end;
Run Code Online (Sandbox Code Playgroud)

  • "WizardForm.Close"显示"是/否"对话框询问用户是否要取消,是否有其他强制执行取消的代码? (2认同)