#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
неправильно. Любые предложения приветствуются!