Автоматическая установка MySQL (с использованием NSIS) не работает должным образом - PullRequest
1 голос
/ 01 октября 2011

Я пытаюсь создать специальный установщик, который автоматически устанавливает MySQL, но я сталкиваюсь с той же проблемой в течение нескольких дней.После установки сервера MySQL происходит сбой инициализации, поэтому, когда я пытаюсь ввести пароль, он мгновенно закрывается (это означает, что пароль был либо неправильно установлен, либо даже хуже, не был установлен вообще).

Воткод для установщика:

!define PRODUCT_NAME "Soft1"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Zaco"</p>

<p>SetCompressor lzma</p>

<p>!include "MUI2.nsh"</p>

<p>!define MUI_ABORTWARNINGS
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_WELCOMEPAGE_TEXT "Welcome txt"</p>

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

<p>!insertmacro MUI_LANGUAGE "English"</p>

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

<p>Section -Settings 
    SetOutPath "$INSTDIR"
    SetOverwrite ifnewer
SectionEnd</p>

<p>Section "MySQL" SEC_01</p>

<pre><code>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"
</code>

SectionEnd


Содержимое файла my.ini скопированоиз файла my.ini, созданного после ручной установки и настройки MySQL Server с помощью мастера настройки экземпляра MySQL Server.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 Server, он позволит мне выбрать эти параметры, как если бы команды инициализации из установщика вообще не влияли наСервер.

Любые предложения о том, как я могу решить эту проблему, приветствуются.

Заранее благодарим за беспокойство!

1 Ответ

1 голос
/ 02 октября 2011

Я считаю, что при вызове приложения командной строки, для которого требуются параметры, содержащие кавычки, лучше всего вызвать cmd.exe с параметром / S и передать саму командную строку в качестве параметров. Итак, используя ваш пример, вы бы использовали это:

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