如何在Inno Setup中执行cmd命令

2024-01-26

为了静默安装 MySQL,我在 cmd 中尝试了以下命令,它工作正常:

msiexec /i "mysql-essential-6.0.11-alpha-winx64.msi" /qn

但是,我该如何运行该命令安装前在 Inno 设置中?


您可以通过调用来执行它Exec http://jrsoftware.org/ishelp/topic_isxfunc_exec.htm函数从CurStepChanged http://jrsoftware.org/ishelp/topic_scriptevents.htm#CurStepChanged事件方法,当步骤将是ssInstall。下面的脚本显示了如何将 MySQL 安装程序包含到您的安装中以及如何在安装开始之前提取并执行它:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi"

[Files]
Source: "{#MySQLInstaller}"; Flags: dontcopy
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  Params: string;
  ResultCode: Integer;
begin
  if (CurStep = ssInstall) then
  begin
    ExtractTemporaryFile('{#MySQLInstaller}');
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn';
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
      MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode),
             mbInformation, MB_OK);
  end;
end;

利用未使用的进度条:

由于 MySQL 安装完成需要一些时间,并且您决定隐藏安装程序的用户界面(无论如何这也可能非常不安全),因此您可以扩展脚本以使用其显示的进度条安装期间的起始位置并且当时未使用。以下代码将(至少在 Windows XP 系统上)Inno Setup 的安装进度条切换为marquee style http://msdn.microsoft.com/en-us/library/windows/desktop/bb760816%28v=vs.85%29.aspx#Marquee_Style并在状态标签中显示说明。 MySQL 安装完成后,进度条切换回正常模式,并开始实际的 Inno Setup 安装:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi"

[Files]
Source: "{#MySQLInstaller}"; Flags: dontcopy
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  Params: string;
  ResultCode: Integer;
begin
  if (CurStep = ssInstall) then
  begin
    WizardForm.ProgressGauge.Style := npbstMarquee;
    WizardForm.StatusLabel.Caption := 'Installing MySQL. This may take a few minutes...';

    ExtractTemporaryFile('{#MySQLInstaller}');
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn';
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
      MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode),
             mbInformation, MB_OK);

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

如何在Inno Setup中执行cmd命令 的相关文章

随机推荐

  • 是否值得对数据库中的电子邮件地址进行加密?

    我已经在使用了加盐哈希 http www matasano com log 958 enough with the rainbow tables what you need to know about secure password sch
  • 用vb6实现多线程

    我的任务是通过连接到电脑的多个串行端口实现自动化过程 我如何使用 vb6 实现多线程 以通过附加的串行端口独立执行一些自动化任务 提前致谢 不 vb6 不支持多线程 它通过破解 winapi 在 vb5 中工作 但在 vb6 中完全被破坏
  • JSF不支持跨域验证,有解决方法吗?

    JSF 2 0 只允许您验证一个字段上的输入 例如检查它是否具有特定长度 它不允许您有一个表格 其中显示 输入城市和州 或仅输入邮政编码 你是怎么解决这个问题的 我只对涉及 JSF 验证阶段的答案感兴趣 我对将验证逻辑放入托管 Bean 不
  • 交叉验证 SPARK 期间的自定义评估器

    我的目标是向 CrossValidator 函数 PySpark 添加基于排名的评估器 cvExplicit CrossValidator estimator cvSet numFolds 8 estimatorParamMaps para
  • Angular 2子路由会刷新父路由吗

    我有一个应用程序 在某些情况下 我在父路线的子路线之间进行路线 一个看起来像example com a 1 其他example com a 2 将从切换1 to 2触发页面的重新加载 渲染a 就像播放视频一样a并且有一个与该视频同级的路线出
  • equals 和 hashCode 的通用反射辅助方法

    我正在考虑为 equals 和 hashCode 创建一个反射辅助方法 在 equals 的情况下 辅助方法会通过反射 API 查找 objectA 的字段 并将它们与 objectB 的字段进行比较 对于 hashCode 辅助方法会检查
  • Common Lisp 中的 comma-comma-at

    我对 comma comma at 的作用感到困惑 使用 comma comma at 的示例如下定义 Lisp 宏时是否需要使用双引号 双逗号 https stackoverflow com questions 17938242 is t
  • 注册DLL时出错

    我正在尝试使用命令 regsvr32 dll name dll 注册 DLL 但出现以下错误 模块 Addition dll 已加载 但 找不到入口点 DLLRegisterServer 确保 Addition dll 是有效的 DLL 或
  • AppleScript 和 Mail.app:检查新消息是否包含字符串

    我正在编写一个脚本来检查是否已提交特定的网络表单 到目前为止 脚本内容如下 tell application Mail check for new mail set newmail to get the unread count of in
  • 将 Json String 反序列化为多种 Object 类型

    我有一个从网络服务获得的 Json 字符串 它有一个集合列表 每个集合代表一个对象 例如 Root List First Collection Team Object id 1 team name Equipe Saidi is activ
  • 找不到驱动器 ID。您有权查看此文件吗? Android 谷歌驱动器集成

    我正在使用以下代码github https github com googledrive android demos blob master src com google android gms drive sample demo Edit
  • 基于判别器的 Typescript 窄参数类型

    我有一个旧版 API 如下所示 游乐场链接 https www typescriptlang org play code C4TwDgpgBAwg9gWwQQwHYBMCMUC8UDeAUFCVAMYLoBcUARAiFAGYCWATgM7
  • Django 使用证书身份验证连接到 Postgresql

    在 Django 1 9 中 我必须在 settings py 中进行哪些更改才能使用证书身份验证连接到 postgresql 数据库 将其添加到settings py为我工作 import os DATABASES default ENG
  • 使用 python 删除/替换多行代码部分

    我试图在 python 的帮助下从各种文件中删除包含废弃代码片段的多行 我寻找了一些例子 但无法真正找到我想要的东西 我基本上需要的是原则上执行以下操作 包含非 python 语法 def cleanCode filepath Clean
  • 如何构造一个数组以首先比较然后添加输入

    由于是 React 和 js 的初学者 我很难正确构建数组 我在网上找到一篇文章 说使用concat方法可以构造一个数组 我也遵循同样的技术 但我的问题是它附加数据并比较是否已经存在相同的数据 我想在附加到数组之前比较数据 这样就不会有重复
  • 右值引用和左值引用作为参数之间的区别

    读完帖子后 http www cprogramming com c 11 rvalue references and move semantics in c 11 html http www cprogramming com c 11 rv
  • 通过隐式链接重新链接使用更新的共享库的应用程序?

    假设我更改了共享库并重新编译了它 我是否必须重新链接使用该共享库的所有主要应用程序 如果我使用带有隐式链接的共享库 include myLib h 或重新链接是在这些应用程序加载时自动完成的 仅当满足以下条件时才需要重新编译应用程序二进制接
  • 无法加载插件@typescript-eslint:找不到模块“eslint-plugin-@typescript-eslint”

    我正在将我的项目从 tslint 重新配置为 eslint 我可以手动运行 eslint 但 webpack 无法运行并显示以下错误消息 Module build failed from path node modules eslint l
  • Paypal IPN - 无需与 iPN 模拟器握手 - 使用 github 示例代码

    很短 有很多关于此的问题 我已经浏览了很多 但找不到答案 它应该很简单 我将 github 示例代码复制到我的服务器 将 paypal IPN 模拟器指向它 它应该给我一个握手 事实并非如此 我启动 IPN 模拟器 收到的错误消息是 未发送
  • 如何在Inno Setup中执行cmd命令

    为了静默安装 MySQL 我在 cmd 中尝试了以下命令 它工作正常 msiexec i mysql essential 6 0 11 alpha winx64 msi qn 但是 我该如何运行该命令安装前在 Inno 设置中 您可以通过调