zoukankan      html  css  js  c++  java
  • Inno Setup 在安装过程中启动可执行文件(安装驱动程序)

    我正在使用Inno Setup为我的应用程序创建安装程序.安装程序非常基本,只是复制一些文件.这非常有效,我很满意.

    我最近实现了USB支持,需要从IVI基础安装USB驱动程序.它基本上是一个exe文件,必须在安装过程中的某个地方启动.到目前为止,用户必须单独安装驱动程序,这不是那么优雅.我的第一个方法是:

    1 [Run]
    2 Filename: "{app}driverIviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
    3 Filename: "{app}driverIviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
    4 Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName,"&","&&")}}"; Flags: postinstall skipifsilent

    这样可行,但用户必须选择正确的位数.这里的优点是他可以选择不安装它(在这种情况下,应用程序只是忽略USB功能,这很好).我真正想要的是自动检测系统的位数并运行设置过程.这不必在[Run]部分,虽然我没有任何反对它(因为用户可以选择不安装它).

    我还找到了一些代码并试图像这样运行它:

     1 de]
     2 procedure CurStepChanged (CurStep: TSetupStep);
     3 var
     4    WorkingDir:   String;
     5    ReturnCode:   Integer;
     6 begin    
     7    if (ssInstall = CurStep) then
     8      Log('Starting driver installation');
     9      WorkingDir := ExpandConstant ('{app}driver');
    10      Exec ('IviSharedComponents_2.2.1.exe','',WorkingDir,SW_SHOW,ewWaitUntilTerminated,ReturnCode);
    11 end;

    但这不会启动安装(虽然我可以看到日志条目’启动驱动程序安装’).我的道路有问题吗?我做错了什么?如何更改此脚本以根据位数自动选择正确的可执行文件?

    编辑:我在[任务]条目中使用了建议的解决方案.实现看起来像这样(仅供参考):

    1 [Tasks]
    2 Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:";
    3  
    4 [Run]
    5 Filename: "{app}driverIviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent
    6 Filename: "{app}driverIviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent

    这非常有效,非常感谢您的帮助!

    解决方法

    在这种情况下,最好删除postinstall标志,使其在设置过程结束时(但在完成之前)无条件运行,并添加Check:参数以将其限制为正确的位数:
    1 [Run]
    2 Filename: "{app}driverIviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent
    3 Filename: "{app}driverIviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent

    如果您希望这是有条件的,您可以使用在安装开始之前提示的正常[任务]条目.

  • 相关阅读:
    极速安装JumpServer
    高并发限流策略
    JDK1.8源码分析:Future和FutureTask-任务异步执行结果
    nginx 转发 header 数据丢失
    zookpeer 和 redis 集群内一致性协议 及 选举 对比
    Spring Boot 中 Druid 的监控页面配置
    eclipse使用正则表达式查找替换
    jvm 线程状态
    Redis做分布式锁
    Dubbo的异常处理
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13608255.html
Copyright © 2011-2022 走看看