Inno Setup 和 VC Redistributable 并优雅地处理退出代码 3010

2023-12-20

In my CurStepChanged我有一些安装 Visual Studio Redistributable 的代码(如果需要)。代码片段:

if (bVcRedist64BitNeeded) then
begin
    if Exec(ExpandConstant(vcRedist64BitPath), '/install /passive /norestart', '',
            SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
        { handle success if necessary; ResultCode contains the exit code }
        Log('VS Redist (64 bit) installer exit code = ' + IntToStr(ResultCode));
        if not (ResultCode = 0) then begin
            MsgBox(ExpandConstant('{cm:InstallFailed,Visual Studio x64 Redistributable}'), mbInformation, MB_OK);
            Abort();
        end;
    end
    else begin
        { The execution failed for some reason }
        Log('VS Redist (64 bit) installer exit code = ' + IntToStr(ResultCode));
        MsgBox(SysErrorMessage(ResultCode), mbInformation, MB_OK);
        Abort();
    end;
end;

我有一位用户说我的软件安装程序失败,所以我要求他们向我发送他们的日志。在所有日志的末尾,它与此类似:

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 退出代码的官方文档,但它似乎是软重启。不管怎样,今天他们尝试了我的安装程序,它成功了(因为他们昨晚更换了电脑):

2020-09-06 13:08:38.707   VS Redist (64 bit) installer exit code = 0
2020-09-06 13:09:33.070   VS Redist (32 bit) installer exit code = 0
2020-09-06 13:09:33.071   Need to restart Windows? No
2020-09-06 13:10:07.741   -- Run entry --
2020-09-06 13:10:07.741   Run as: Original user
2020-09-06 13:10:07.741   Type: Exec
2020-09-06 13:10:07.741   Filename: C:\Program Files (x86)\Meeting Schedule Assistant\MeetSchedAssist.exe

所以我假设 3010 确实意味着软重启?如果是这样,我们在 Inno Setup 安装中是否有更好的方法来处理这种情况?


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

在这种情况下,您可以实施当退出代码为 3010 时请求重新启动。

Add NeedRestart事件函数和NeedsRestart全局变量:

var
  NeedsRestart: Boolean;

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

并将退出代码测试逻辑修改为:

if ResultCode = 3010 then
begin
  Log('Need restart');
  NeedsRestart := True;
end
  else
if ResultCode <> 0 then
begin
  MsgBox(
    ExpandConstant('{cm:InstallFailed,Visual Studio x64 Redistributable}'),
    mbInformation, MB_OK);
  Abort();
end;

类似问题:如何根据执行程序/子安装程序的过程结果重新启动 Inno Setup 安装程序 https://stackoverflow.com/q/74742659/850848

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Inno Setup 和 VC Redistributable 并优雅地处理退出代码 3010 的相关文章

随机推荐

  • 使用 guice 构建带有注入类的框架,初始化的正确方法是什么?

    我正在尝试编写一个框架 其中任意 bean 类都通过我的 API 中的类注入 并且它们可以与这两个类交互 也可以根据定义的注释触发回调 这是一个示例 bean Experiment static class TestExperiment p
  • Android NDK:您确定您的 NDK_MODULE_PATH 变量已正确定义吗?

    最近 3天前 开始学习Android Studio 我购买了一个 Eclipse 游戏项目来玩 但出现错误 当我修复该错误时 我收到一个新错误 目前的错误如下 构建命令失败 执行过程时出错 C Users user AppData Loca
  • 不考虑回到起点的旅行商问题(TSP)的问题名称是什么?

    我想知道 TSP 的问题名称是什么 不考虑返回起点的方式 以及解决这个问题的算法是什么 我研究了最短路径问题 但这不是我想要的 问题只是从 2 个指定点找到最短路径 但我要寻找的是我们给出n个点并且只输入1个起点的问题 然后 找到经过所有点
  • 在应用程序和扩展程序之间共享捆绑资源

    我的照片共享扩展计划使用相同的设计资源 用于导航和向照片添加 图章 贴纸 如应用程序沙盒设计指南中所述 沙盒应用程序组 需要共享文件和其他信息的可以请求容器 目录作为其权利的一部分 这些目录是存放的 在 Library Group Cont
  • 如何获取 XGBClassifier 的预测 p 值?

    我想知道 XGBClassifier 对它所做的每个预测的置信度如何 有可能有这样的价值吗 或者 predict proba 是否已经间接成为模型的置信度 你的直觉确实是正确的 predict proba返回每个示例属于给定类别的概率 来自
  • 读取注册表项的性能?

    我想知道通过标准 C 库从 Windows 注册表读取注册表值需要多长时间 以毫秒为单位 在这种情况下 我正在阅读一些代理设置 我应该期望什么数量级的值 有没有好的基准数据可用 我正在运行 WS2k8 R2 amd64 加分点 操作系统 s
  • Django REST框架范围过滤器

    如何在 Django REST Framework 中对日期和数字进行范围过滤 其他过滤器 lt gt 等 工作正常 我尝试了很多变体 例如 import rest framework filters as filters class Or
  • 如何在 PHP 中将查询字符串转换为斜杠 URL?

    我想将 URL 转换为 http localhost projectname api index php type login to http localhost projectname api login Convert在这里不是一个常用
  • 如何统计Apache Flink在给定时间窗口内处理的记录数

    在flink中定义一个时间窗口后如下 val lines socket timeWindowAll Time seconds 5 如何计算该特定 5 秒窗口内的记录数 执行计数聚合的最有效方法是ReduceFunction 然而 reduc
  • 引用 jssc 库的可运行 jar 无法满足链接错误

    我们正在创建一个可运行的 java jar 来在 beagleboneblack 运行 ubuntu 上运行 我们创建了一个可运行的 jar 它可以在我们的 mac 和 pc windows 上运行良好 但不能在 ubuntu 系统上运行
  • Skype for Business URI 而不是 Skype

    因为我们可以选择通过提供 URI 来打开 Skype 中的链接 skype xyz call 我们可以做类似的事情来实现相同的功能 但它会在 Skype for Business 中打开吗 请告诉我 Cheers 经过大量研究后找到了解决方
  • 为什么Linq GroupBy在OrderBy之后驳回了订单操作?

    我有一个Action模型与Session导航属性 考虑这段代码 var x db Actions OrderBy p gt p Session Number ThenBy p gt p Date it s OK x 是一个有序的 Actio
  • 在 JasperReports 中以任意角度旋转文本

    我在用iReport生成pdf 我需要以任意角度旋转文本 正如我在文档中读到的那样 iReport可以将文本旋转 90 180 270 和 360 度 我也想要它的动态值 为此 我尝试了这些过程 但没有得到预期的结果 使用自定义 jar 旋
  • 删除列表项时出现意外的索引错误[重复]

    这个问题在这里已经有答案了 我是 Python 初学者 我以前学过其他语言 比如C 初学者 和JQuery 但我发现 python 中的循环非常混乱 好吧 我想实现一个简单的结果 程序将循环遍历单词列表 然后删除与first两个字母与列表中
  • 带有 MVC4 模型绑定的 Angular JS 因日期/日期时间而失败?

    当使用 Angular JS 将复杂对象的日期时间和日期时间回发到服务器时 值未正确绑定 我尝试过 JSON stringify 无济于事 我已经发布了一个相关问题 但可能太笼统了 我真正需要知道的是如何正确传递这些日期 我目前正在做的是使
  • 检测 NSString 中的电话号码

    我想从 NSString 中提取电话号码 例如 在字符串中致电约翰 994 456 9966 我想提取994 456 9966 我尝试过类似的代码 NSString nameRegex d 3 s d 3 s d 4 NSPredicate
  • 使用 IIS7 URL 重写模块强制使用 HTTPS 并避免重复的 URL

    我需要强制每个请求https www mysite com https www mysite com 始终带有 https 和 www 该网站托管在 GoDaddy 中 我需要通过 IIS7 URL 重写模块来完成此操作 我已经能够使用以下
  • 维护asp.net、C#中Fileupload控件的值

    我在更新面板中使用 Fileupload 和 3 个下拉控件 3 个下拉列表将在下拉所选索引更改事件上回发 即 国家 州和城市 根据国家 州和城市从数据库获取值 问题是 回发时 文件名路径将从文件上传控件中消失 如预期 或默认属性 我正在将
  • DocuSign Connect Webhook 不包括 HMAC 标头

    我已经参考过this https stackoverflow com questions 56673644 docusign connect webhook call did not include hmac header x docusi
  • Inno Setup 和 VC Redistributable 并优雅地处理退出代码 3010

    In my CurStepChanged我有一些安装 Visual Studio Redistributable 的代码 如果需要 代码片段 if bVcRedist64BitNeeded then begin if Exec Expand