2011-10-01 84 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