InstallShield 2014,自定义操作并将 sql 文件执行到 MySQL

InstallShield 2014, Custom Actions and executing sql files into MySQL

我正在为我们的产品构建一个运行良好的安装程序。我已经设法构建自定义操作来安装我们的服务,包括 MySQL 服务器。

我遇到的问题是执行 sql 文件来构建模式结构。

我有一个使用 mysql.exe 和命令行参数的自定义操作: --port=### --user=### --password=### <[INSTALLDIR]db\EmptyStruct.sql

它尝试执行此操作,但在安装过程中弹出的 cmd window 仅通过 mysql.exe 命令行选项 运行s,这对我说它传递的命令行不正确。但是,如果我在安装后手动 运行 命令,它会完美运行。

请问大家有什么想法吗

我在这里做一些假设:

  • 您有一个 Windows 安装程序 exe 自定义操作,它指定 mysql.exe 和您显示的命令行
  • 您希望 [INSTALLDIR]db\EmptyStruct.sql 的内容被重定向到 mysql.exe 的标准输入

这不会发生。在幕后,Windows 安装程序的 exe 自定义操作支持使用 CreateProcess API 并且此 API 将按字面解释命令行。然而,重定向 < 需要特殊处理才能实际执行重定向。

要获得该行为,您必须使用一个间接层。例如,您可以 运行 cmd.exe 作为 exe,并给它一个命令行,让它解释和 运行 命令行 mysql.exe --port= ... < "[INSTALLDIR]..."。但是,如果您还没有显示命令提示符,这将导致一个出现。如果你想避免这种情况,你可以编写一个自定义包装器来为你执行重定向,可以是 C++ DLL 也可以是 InstallScript 操作。

或者,如果有一个参数告诉 mysql.exe 到 运行 文件中的脚本,您可以传递该参数而不是使用重定向。我无法在快速网络搜索中找到此类参数的证据。

感谢您的评论,Michael 和我使用 cmd.exe /k AddStruct.bat 来完成任务!