Installation Inno安装:如何在安装过程中中止/终止安装?

Installation Inno安装:如何在安装过程中中止/终止安装?,installation,inno-setup,Installation,Inno Setup,在安装过程中,我运行一个bat文件。如果bat文件返回错误,我需要中止/终止设置。我想让它做一个MsgBox告诉用户发生了什么,然后让中止看起来像用户按下了取消按钮一样 是否可以中止/终止设置 非常感谢代码示例 [运行] 文件名:{tmp}\test.bat;WorkingDir:{tmp};标志:WaitUntFilterminated runhidden 问题在于安装过程成功完成后会出现[Run]。 所以此时不能取消,只能卸载。 另外,[Run]不允许您获取退出代码 所以你有几个选择 使用事

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

是否可以中止/终止设置

非常感谢代码示例

[运行]
文件名:{tmp}\test.bat;WorkingDir:{tmp};标志:WaitUntFilterminated runhidden

问题在于安装过程成功完成后会出现
[Run]
。 所以此时不能取消,只能卸载。 另外,
[Run]
不允许您获取退出代码

所以你有几个选择

使用事件:
过程CurStepChanged(CurStep:TSetupStep)

使用
Exec
ExecAsOriginalUser
调用
{tmp}\test.bat
,两者都返回结果代码。然后可以提示用户卸载

不过,我认为执行取消操作会更容易

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

下面是一些示例代码,展示了如何实现它

[文件]
资料来源:“MYPROG.EXE”;DestDir:“{app}”;后安装:MyAfterInstall
[守则]
程序MyAfterInstall();
变量
重编码:整数;
开始
如果Exec(ExpandConstant({tmp}')+'\test.bat',
'',SW_HIDE,ewwaitunterminated,ResCode)然后
开始
{成功运行的程序重新编码现在包含退出代码结果}
{如果退出为10,则取消安装。}
如果重新编码=10,则
开始
向导窗体。关闭;
结束;
结束
其他的
开始
{运行程序时出现问题}
MsgBox('Error',SysErrorMessage(重新编码),mbError,MB_OK);
结束;
结束;

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

[文件]
资料来源:“MYPROG.EXE”;DestDir:“{app}”;后安装:MyAfterInstall
[守则]
var CancelWithoutPrompt:布尔值;
函数InitializeSetup():Boolean;
开始
CancelWithoutPrompt:=false;
结果:=真;
结束;
程序MyAfterInstall();
开始
{做点什么}
如果结果不好,就开始吧
MsgBox('应该取消,因为…',mbError,MB_OK)
CancelWithoutPrompt:=真;
向导窗体。关闭;
结束;
结束;
过程取消按钮单击(CurPageID:Integer;var Cancel,Confirm:Boolean);
开始
如果CurPageID=wpp,则
确认:=无提示不取消;
结束;

我使用了此处答案中的一些代码,在[run]部分编写了安全运行命令的代码,并给出了正确的通知和错误回滚。

只是为了补充其他可能性:

如果您可以在从用户收集任何信息之前检查先决条件,那么最好在
InitializeSetup
函数中进行检查。这允许您显示
MsgBox
,然后使用
Result:=False退出以中止安装

如果您需要先从用户那里收集一些信息(例如安装目录),但仍然可以在不安装任何文件的情况下检查条件(除了通过
ExtractTemporaryFile
进行的一些检查),那么最好的位置是
PrepareToInstall
功能。这允许您显示一条错误消息(通过返回它),此时用户可以返回并更正某些内容,也可以自行退出安装

如果您正在检查的条件与特定页面(同样,如目标目录)上的用户选择相关,并且您可以快速执行检查,而根本不改变用户的系统,那么最好在
NextButtonClick
中处理该情况;您可以显示带有错误的
MsgBox
,然后返回
False
,以防止转到下一页


如果您必须等到安装完所有其他内容之后,那么退出安装就太晚了,但是如果您想这样做,那么Robert的回答就足够了。

谢谢。这正是我要找的。“WizardForm.Close”显示一个“是/否”对话框,询问用户是否要取消,我是否有其他代码强制执行取消?WizardForm.Close仅在非静默设置中有效。又见又见。