1

我正在尝试制作一个静默安装 MySQL 的自定义安装程序,但我几天都遇到了同样的问题。安装 MySQL 服务器后,初始化失败,当我尝试输入密码时它立即关闭(这意味着密码设置错误,或者更糟糕的是,根本没有设置)。

这是安装程序的代码:

!define PRODUCT_NAME "Soft1"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Zaco"

SetCompressor lzma

!包括“MUI2.nsh”

!define MUI_ABORTWARNINGS !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_WELCOMEPAGE_TEXT "欢迎 txt"

!insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Lic.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE "英语"

名称“${PRODUCT_NAME} ${PRODUCT_VERSION}” 输出文件“Soft1.exe” 安装目录“$PROGRAMFILES\Soft1” ShowInstDetails 显示

部分 - 设置 SetOutPath "$INSTDIR" SetOverwrite ifnewer 部分结束

“MySQL”部分 SEC_01

File mysql.msi
ExecWait 'msiexec /i "$INSTDIR\mysql.msi" /quiet'
SetOutPath "$PROGRAMFILES\MySQL\MySQL Server 5.1"
File my.ini
File mysql-init.txt
ExecWait '"$PROGRAMFILES\MySQL\MySQL Server 5.1\bin\mysqld"  --defaults-file = "$PROGRAMFILES\MySQL\MySQL Server 5.1\my.ini" '  
ExecWait '"$PROGRAMFILES\MySQL\MySQL Server 5.1\bin\mysqld"  --init-file = "$PROGRAMFILES\MySQL\MySQL Server 5.1\mysql-init.txt" '
ExecWait "Net Start MySQL"

部分结束


my.ini 文件的内容是从使用 MySQL 服务器实例配置向导手动安装和配置 MySQL 服务器后创建的 my.ini 文件复制而来的。mysql-init.txt 包含以下代码:

CREATE USER root IDENTIFIED BY PASSWORD 'New_Password';
授予 * 上的所有特权。* TO 'root'@ 'localhost' IDENTIFIED BY 'New_Password' WITH GRANT OPTION ;

我也尝试将此代码用于 mysql-init.txt 但得到相同的结果:

更新 mysql.user SET Password=PASSWORD('New_Password')
WHERE 用户='root';
同花顺特权;

此外,如果尝试使用 MySQL 服务器实例配置向导配置服务器,它会让我选择这些选项,就好像安装程序中的初始化命令对服务器完全没有影响一样。

欢迎任何关于我如何解决这个问题的建议。

提前感谢您的关心!

4

1 回答 1

1

I find that when calling a command line app that requires parameters that contain quotes, it is best to call cmd.exe with the /S parameter and pass the command line itself as parameters. So using your example you would use this:

ExpandEnvStrings $ComSpec %COMSPEC%

ExecWait '"$ComSpec" /S /C ""$PROGRAMFILES\MySQL\MySQL Server 5.1\bin\mysqld" --defaults-file = "$PROGRAMFILES\MySQL\MySQL Server 5.1\my.ini""'

ExecWait '"$ComSpec" /S /C ""$PROGRAMFILES\MySQL\MySQL Server 5.1\bin\mysqld" --init-file = "$PROGRAMFILES\MySQL\MySQL Server 5.1\mysql-init.txt""'
于 2011-10-02T12:48:19.807 回答