Автоматическая установка MySQL (с использованием NSI) не работает должным образом

#mysql #nsis #silent-installer

#mysql #nsi #silent-installer

Вопрос:

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

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

!определите PRODUCT_NAME "Soft1" !определите PRODUCT_VERSION "1.0" !определите PRODUCT_PUBLISHER "Zaco"

SetCompressor lzma

!включить "MUI2.nsh"

!определите MUI_ABORTWARNINGS !определите MUI_ICON "$ {NSISDIR} Contrib Graphics Icons modern-install.ico" !определите MUI_WELCOMEPAGE_TEXT "Текст приветствия"

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

!insertmacro MUI_LANGUAGE "Английский"

Имя "${PRODUCT_NAME} $ {PRODUCT_VERSION}" OutFile "Soft1.exe " InstallDir "$PROGRAMFILESSoft1" ShowInstDetails показать

Section -Settings SetOutPath "$INSTDIR" SetOverwrite ifnewer SectionEnd

Раздел "MySQL" SEC_01

 File mysql.msi
ExecWait 'msiexec /i "$INSTDIRmysql.msi" /quiet'
SetOutPath "$PROGRAMFILESMySQLMySQL Server 5.1"
File my.ini
File mysql-init.txt
ExecWait '"$PROGRAMFILESMySQLMySQL Server 5.1binmysqld"  --defaults-file = "$PROGRAMFILESMySQLMySQL Server 5.1my.ini" '  
ExecWait '"$PROGRAMFILESMySQLMySQL Server 5.1binmysqld"  --init-file = "$PROGRAMFILESMySQLMySQL Server 5.1mysql-init.txt" '
ExecWait "Net Start MySQL"
  

SectionEnd

Содержимое файла my.ini копируется из файла my.ini, созданного после ручной установки и настройки сервера MySQL с помощью мастера настройки экземпляра сервера MySQL. mysql-init.txt содержит следующий код:

СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ root, ИДЕНТИФИЦИРОВАННОГО ПАРОЛЕМ 'New_Password';
ПРЕДОСТАВЬТЕ ВСЕ ПРИВИЛЕГИИ НА * . * ДЛЯ 'root' @ 'localhost', ИДЕНТИФИЦИРУЕМОГО 'New_Password' С ОПЦИЕЙ GRANT ;

Я также пытался использовать этот код для mysql-init.txt но я получаю тот же результат:

ОБНОВИТЬ mysql.пользователь УСТАНОВИЛ пароль = ПАРОЛЬ (’New_Password’)
ГДЕ User = ’root’;
СБРОСИТЬ ПРИВИЛЕГИИ;

Кроме того, если попытаться настроить сервер с помощью мастера настройки экземпляра сервера MySQL, он позволяет мне выбирать эти параметры, как если бы команды инициализации из установщика вообще не влияли на сервер.

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

Заранее спасибо за вашу заботу!

Ответ №1:

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

 ExpandEnvStrings $ComSpec %COMSPEC%

ExecWait '"$ComSpec" /S /C ""$PROGRAMFILESMySQLMySQL Server 5.1binmysqld" --defaults-file = "$PROGRAMFILESMySQLMySQL Server 5.1my.ini""'

ExecWait '"$ComSpec" /S /C ""$PROGRAMFILESMySQLMySQL Server 5.1binmysqld" --init-file = "$PROGRAMFILESMySQLMySQL Server 5.1mysql-init.txt""'
  

Комментарии:

1. Я также пытался использовать ваше решение, но оно s not working. It seems like my problem is caused by the use of mysqld. I tried to install MySQL Server, leave it unconfigured and than type the above commands in cmd but it тоже не работает. Таким образом, я предполагаю, что это s that either the my.ini and the mysql-init.txt contain the wrong info or the way I tried using msqld it неправильно. Любые предложения приветствуются!