2011-10-01 86 views
1

我正在尝试制作一个自定义安装程序,该安装程序默默安装MySQL,但我遇到了相同的问题几天。安装MySQL服务器后,初始化失败,因此,当我尝试输入密码时,它会立即关闭(意味着密码设置错误或者更糟,根本没有设置)。MySQL无提示安装(使用NSIS)无法正常工作

这里是安装程序的代码:my.ini文件的内容是从后创建my.ini文件复制

 
!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


使用MySQL服务器实例配置向导手动安装和配置MySQL服务器。 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-init.txt这段代码也试过,但我得到了相同的结果:

 
UPDATE mysql.user SET Password=PASSWORD(’New_Password’) 
WHERE User=’root’; 
FLUSH PRIVILEGES; 

而且,如果尝试使用MySQL服务器实例配置向导来配置服务器,它让我选择这些选项,就好像安装程序的初始化命令在服务器上根本没有任何作用一样。

任何有关我如何解决这个问题的建议都是值得欢迎的。

在此先感谢您的关注!

回答

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

我也尝试过使用你的解决方案,但它不工作。这似乎是我的问题是由使用mysqld造成的。我试图安装MySQL服务器,将其保留为未配置状态,而不是在cmd中键入上述命令,但它也无法正常工作。因此,我的猜测是,my.ini和mysql-init.txt包含错误的信息或者我尝试使用msqld的方式是错误的。欢迎任何建议! – ZLMN