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 来完成任务!
我正在为我们的产品构建一个运行良好的安装程序。我已经设法构建自定义操作来安装我们的服务,包括 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 来完成任务!