Inno Setup 根据可执行调用的结果有条件重新启动

2023-11-29

我的 Inno Setup 脚本用于安装驱动程序。它运行我的InstallDriver.exe在步骤中复制此文件后ssInstall.

我需要根据返回的值要求用户在某些情况下重新启动InstallDriver.exe.

这意味着我不能把InstallDriver.exe在部分[Run]因为没有办法监控它的返回值。

所以我把它放在函数中CurStepChanged()如下:

procedure CurStepChanged(CurStep: TSetupStep);
var
  TmpFileName, ExecStdout, msg: string;
  ResultCode: Integer;
begin
  if  (CurStep=ssPostInstall)  then
  begin 
    Log('CurStepChanged(ssPostInstall)');
    TmpFileName := ExpandConstant('{app}') + '\InstallDriver.exe';
    if Exec(TmpFileName, 'I', '',  SW_HIDE, ewWaitUntilTerminated, ResultCode) then .......

但是,我无法找到一种方法让我的脚本在这个阶段重新启动。

我想到使用函数NeedRestart()监视驱动程序安装程序的输出,但它是在此过程的早期调用的。 从内部调用驱动程序安装程序是否有意义NeedRestart()?


NeedRestart看起来不适合安装任何东西。但它会起作用,因为幸运的是它只被调用一次。不过,您可能希望以某种方式呈现进度,因为在调用期间向导表单几乎为空NeedRestart.


另一种方法是使用AfterInstall范围 of the InstallDriver.exe或驱动程序二进制文件本身(以稍后安装的为准)。

#define InstallDriverName "InstallDriver.exe"

[Files]
Source: "driver.sys"; DestDir: ".."
Source: "{#InstallDriverName}"; DestDir: "{app}"; AfterInstall: InstallDriver

[Code]
var
  NeedRestartFlag: Boolean;

const
  NeedRestartResultCode = 1;

procedure InstallDriver();
var
  InstallDriverPath: string;
  ResultCode: Integer;
begin
  Log('Installing driver');
  InstallDriverPath := ExpandConstant('{app}') + '\{#InstallDriverName}';
  if not Exec(InstallDriverPath, 'I', '',  SW_HIDE, ewWaitUntilTerminated, ResultCode) then
  begin
    Log('Failed to execute driver installation');
  end
    else
  begin
    Log(Format('Driver installation finished with code %d', [ResultCode]))
    if ResultCode = NeedRestartResultCode then
    begin
      Log('Need to restart to finish driver installation');
      NeedRestartFlag := True;
    end;
  end;
end;

function NeedRestart(): Boolean;
begin
  if NeedRestartFlag then
  begin
    Log('Need restart');
    Result := True;
  end
    else
  begin
    Log('Do not need restart');
    Result := False;
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Inno Setup 根据可执行调用的结果有条件重新启动 的相关文章

随机推荐

  • 从 RDD 访问 KafkaOffset 时出现异常

    我有一个来自 Kafka 的 Spark 消费者 我正在尝试管理一次性语义的偏移量 但是 在访问偏移量时 它会引发以下异常 java lang ClassCastException org apache spark rdd MapParti
  • C# 文本框禁用快捷键

    i use a textbox inside my windows form application and i need to disable the shortcuts CTRL I and CTRL H I tried many di
  • Filter对象没有pop属性

    colorramps re split ramp 0 9a fA F 6 rampend 0 9a fA F 6 message colorramps reverse if len colorramps gt 1 starttext col
  • Oracle 数据库测试挑战 - 比较架构数据

    想知道是否有人可以帮助我在这个挑战中找到正确的方向 或者告诉我我很想通过 sql 尝试这个 如果 sql 太具有挑战性 是否有任何免费或廉价的工具可以帮助我自动化执行此操作 我正在测试新旧 Oracle 数据库之间的一些数据 我想做的是能够
  • 有没有办法克隆 tkinter 小部件?

    我正在尝试创建小部件网格 这个小部件网格一开始是标签 告诉我它们的坐标 然后我有一个将替换它们的按钮的起点和终点的列表 假设我有一个从 0 0 到 0 2 的按钮 我从该位置删除标签 并在此处放置一个具有正确行距的按钮 如果一个按钮将替换另
  • Apache Kafka 中的分区数量是否有上限

    我读到它是 10000 但我想知道的是这个限制是针对 1 个代理还是整个集群 我想要一个带有事件名称的主题并捕获用户的所有事件流 现在 我希望在该特定用户的事件将发生的专用分区上记录每个用户的活动 现在 如果用户数量超过 10000 该怎么
  • 在两个微服务之间共享域模型的最佳实践

    是否有关于如何在两个微服务之间共享域模型的最佳实践或指南 我有一个微服务 1 它提供与所有 CRUD 资源 例如订单 交互的端点 另一个微服务 2 对资源 订单 执行特定的非 CRUD 任务 微服务 2 几乎需要所有订单属性来执行其操作 在
  • 视觉代码 - 排除具有多个条件的文件

    有一个选项可以使用 when 关键字排除生成的文件 例如 files exclude js when basename ts 我还想排除从 tsx 文件生成的 js 文件 两者都不 js when basename ts basename
  • C#:FTP上传缓冲区大小

    我有FTP上传功能 但有件事我想问一下 这是缓冲区大小 我将其设置为 20KB 这意味着什么 如果我增加 减少它 会有什么不同吗 private void Upload string filename FileInfo fi new Fil
  • 使用 Thrust::transform 对推力:​​:复杂类型进行操作

    我正在尝试使用thrust transform对类型向量进行操作thrust complex
  • Microsoft.Speech SpeechRecognitionEngine.setInputToDefaultAudioDevice() 方法抛出 System.InvalidOperationException

    我正在使用 Microsoft Speech 不是 System Speech 并且尝试将音频流的输入设置为我的麦克风 这是默认音频设备 但它引发了异常 Microsoft Speech dll 中发生 System InvalidOper
  • jquery 函数不适用于异步加载的 dom 元素

    I wrote jQuery事件处理程序开启DOM尚未出现在页面中但可能会异步加载到页面中的元素 我观察到这些事件处理程序似乎没有意识到一些新元素已添加到DOM并且他们需要在触发时对其采取行动 我的观察正确吗 我如何实现这个功能 如果您希望
  • 为什么 .length 不是一个需要 () 的方法

    JavaScript中为什么关键字长度不需要 似乎所有其他函数 例如 splice shift 都需要括号 我们只能推测为什么它被设为普通属性而不是方法 但是 那 length是每个字符串 数组的常量值 它在计算时不会修改任何内容 它不像方
  • 避免警告“非依赖属性的设置方法不应访问...”

    我有一个类 它有一些属性 并且有 2 个相关 在示例中称为param1 param2 他们是独立的 只是受到约束 param2必须一样大或大于param1并且必须始终存在 如果param1做 有问题的代码类似于 function set p
  • boost asio 缓冲区延迟分配

    异步操作 现在我传递预分配的字节缓冲区 例如 s async receive from boost asio buffer preallocated pointer preallocated size remote endpoint boo
  • 如何从一个 HTML5 画布拖放到另一个画布

    我试图弄清楚如何将图像从一个画布拖放到另一个画布 假设画布彼此相邻 是否可以无缝地将某些东西拖过边界 如果不是 将 div 拖到画布上 获取其 ID 然后通过响应画布上的 mouseup 位置来放置它是不是更好 您不能在画布上拖动项目 画布
  • 如何检查是否有任何 JavaScript 事件侦听器/处理程序附加到元素/文档? [复制]

    这个问题在这里已经有答案了 尝试在线搜索 但看起来我无法正确制定搜索查询 我如何使用 jQuery 或仅使用 javascript 列出附加到元素 文档 窗口或存在于 DOM 中的所有处理程序或事件侦听器 在 1 8 之前的 jQuery
  • 有理数 - ruby​​ 中的原始数字

    如何获得原始号码 例如当我输入 r Rational 2 10 1 5 2和10将更改为1和5 r numerator 1 r denominator 5 如何从 Rational 类的实例中获取 2 和 10 r 我对 Rational
  • Android:DCIM 文件夹中的重复照片存储

    我正在使用本机 Android 相机并将文件保存到应用程序数据文件夹 mnt sdcard Pictures 同时 在某些设备上 照片的另一个副本会保存到 DCIM 文件夹中 这是我的代码 private void startStockCa
  • Inno Setup 根据可执行调用的结果有条件重新启动

    我的 Inno Setup 脚本用于安装驱动程序 它运行我的InstallDriver exe在步骤中复制此文件后ssInstall 我需要根据返回的值要求用户在某些情况下重新启动InstallDriver exe 这意味着我不能把Inst