Inno setup Inno设置和VC可再发行,优雅地处理退出代码3010

Inno setup Inno设置和VC可再发行,优雅地处理退出代码3010,inno-setup,pascalscript,vcredist,Inno Setup,Pascalscript,Vcredist,在我的CurStepChanged过程中,我有一些代码安装Visual Studio可再发行版(如果需要)。代码段: 如果需要(bvcredist64bit),则 开始 如果Exec(ExpandConstant(vcRedist64BitPath),“/install/passive/norestart”,”, SW_SHOW、ewwaitunterminated、ResultCode)然后开始 {必要时处理成功;ResultCode包含退出代码} Log('VS Redist(64位)安装程

在我的
CurStepChanged
过程中,我有一些代码安装Visual Studio可再发行版(如果需要)。代码段:

如果需要(bvcredist64bit),则
开始
如果Exec(ExpandConstant(vcRedist64BitPath),“/install/passive/norestart”,”,
SW_SHOW、ewwaitunterminated、ResultCode)然后开始
{必要时处理成功;ResultCode包含退出代码}
Log('VS Redist(64位)安装程序退出代码='+IntToStr(ResultCode));
如果不是(ResultCode=0),则开始
MsgBox(ExpandConstant({cm:InstallFailed,visualstudio x64可再发行}),mbInformation,MB_OK);
中止();
结束;
结束
否则开始
{由于某种原因执行失败}
Log('VS Redist(64位)安装程序退出代码='+IntToStr(ResultCode));
MsgBox(SysErrorMessage(ResultCode),mbInformation,MB_OK);
中止();
结束;
结束;
我有一个用户说我的软件安装程序失败了,所以我要求他们给我发送他们的日志。在所有日志的末尾,它与此类似:

2020-09-05 14:37:48.034   VS Redist (64 bit) installer exit code = 3010
2020-09-05 14:37:48.035   Message box (OK):
                          The installation of Visual Studio x64 Redistributable failed. The Meeting Schedule Assistant installation will be aborted.
2020-09-05 14:38:38.352   User chose OK.
2020-09-05 14:38:38.352   CurStepChanged raised an exception.
2020-09-05 14:38:38.353   Need to restart Windows? No
2020-09-05 14:38:38.373   Exception message:
2020-09-05 14:38:38.374   Message box (OK):
                          Internal error: Expression error 'Runtime error (at 191:1960):
                          
                          Exception: Operation aborted.'
2020-09-05 14:38:40.747   User chose OK.
2020-09-05 14:38:40.747   Exception message:
2020-09-05 14:38:40.747   Message box (OK):
                          Internal error: Expression error 'Runtime error (at 191:1960):
                          
                          Exception: Operation aborted.'
2020-09-05 14:38:42.082   User chose OK.
2020-09-05 14:38:42.103   Exception message:
2020-09-05 14:38:42.104   Message box (OK):
                          Out Of Range.
2020-09-05 14:38:44.052   User chose OK.
2020-09-05 14:38:51.259   -- Run entry --
2020-09-05 14:38:51.259   Run as: Original user
2020-09-05 14:38:51.259   Type: Exec
2020-09-05 14:38:51.260   Filename: C:\Program Files (x86)\Meeting Schedule Assistant\MeetSchedAssist.exe
我注意到redist设置正在退出,结果是
3010
。我找不到任何关于redist退出代码的官方文档,但它似乎是一个软重启。不管怎样,今天他们尝试了我的安装程序,它成功了(因为他们昨晚换了电脑):


所以我假设3010的意思是软重启?如果是这样,在Inno安装程序中有没有更好的方法来处理这种情况?

如果我理解正确,退出代码意味着安装程序需要重新启动机器

在这种情况下,您可以在退出代码为3010时实现请求重启

添加
NeedsRestart
事件函数和
NeedsRestart
全局变量:

var
  NeedsRestart: Boolean;

function NeedRestart(): Boolean;
begin
  Result := NeedsRestart;
end;
并将退出代码测试逻辑修改为:

如果ResultCode=3010,则
开始
日志(“需要重新启动”);
NeedsRestart:=真;
结束
其他的
如果结果代码为0,则
开始
MsgBox(
ExpandConstant({cm:InstallFailed,Visual Studio x64可再发行}),
MB信息,MB_OK);
中止();
结束;
var
  NeedsRestart: Boolean;

function NeedRestart(): Boolean;
begin
  Result := NeedsRestart;
end;