MySQL静默安装(使用NSIS)无法正常工作

时间:2011-10-01 11:39:10

标签: mysql nsis silent-installer

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

以下是安装程序的代码:

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

SetCompressor lzma

!include "MUI2.nsh"

!define MUI_ABORTWARNINGS !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_WELCOMEPAGE_TEXT "Welcome 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 "English"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Soft1.exe" InstallDir "$PROGRAMFILES\Soft1" ShowInstDetails show

Section -Settings SetOutPath "$INSTDIR" SetOverwrite ifnewer SectionEnd

Section "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"

SectionEnd


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

{{1}}

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

CREATE USER root IDENTIFIED BY PASSWORD 'New_Password';
GRANT ALL PRIVILEGES ON * . * TO 'root'@ 'localhost' IDENTIFIED BY 'New_Password' WITH GRANT OPTION ;

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

欢迎任何有关如何解决此问题的建议。

提前感谢您的关注!

1 个答案:

答案 0 :(得分:1)

我发现在调用需要包含引号的参数的命令行应用程序时,最好使用/ S参数调用cmd.exe并将命令行本身作为参数传递。因此,使用您的示例,您将使用此:

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""'