Как сделать резервную копию базы данных MySQL из NSIS

Мне нужно сделать резервную копию базы данных MySQL из установщика NSIS. Мне не хватает чего-то тривиального в сценариях, которые я пробовал:

nsExec::Exec '"$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --routines $dbName --execute="source D:\$dbName.sql"' $0

nsExec::Exec '"$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --routines $dbName --execute="D:\$dbName.sql"' $0

nsExec::Exec '"$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --execute="--user=$username --password=$password --routines $dbName D:\$dbName.sql"' $0

nsExec::Exec '"$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --routines $dbName "D:\$dbName.sql"' $0

nsExec::Exec '"$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password /c echo --routines $dbName > "D:\$dbName.sql"' $0

ExecWait '"$1" /C "$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --routines $dbName > "D:\$dbName.sql"' $0

ExecWait '/C "$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password --routines $dbName > "D:\$dbName.sql"' $0

StrCpy $BACKUPFILE "D:\ctvi.sql"
StrCpy $1 $BACKUPFILE
ExpandEnvStrings $2 %COMSPEC%
ExecWait '"$2" /C "$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password $dbName > $1' $0

ExecWait '/C "$mySqlDirectory\bin\mysqldump.exe" -u$username --password=$password -R $dbName >"D:\$dbName.sql"' $0

Ни один из них не работал. Передача аргумента - не самая сильная моя сторона :(


person nawfal    schedule 24.07.2012    source источник
comment
Синтаксис NSIS мне подходит. Есть ли параметры с пробелами? В этом случае используйте для них кавычки, например --user=$username. Для отладки параметров строки cmd используйте FileWrite (nsis.sourceforge.net/Docs/Chapter4. html#4.9.5.8) и запишите все в файл .bat. Затем попробуйте запустить файл .bat и посмотрите результаты.   -  person Slappy    schedule 26.07.2012
comment
@Slappy нет, нигде нет пробелов. Я не уверен, какой синтаксис NSIS подходит вам из того, что я упомянул. В любом случае ниже я получил рабочее решение.   -  person nawfal    schedule 26.07.2012


Ответы (1)


Это сработало для меня:

StrCpy $1 "D:\ctvi.sql"
ExpandEnvStrings $2 %COMSPEC%
ExecDos::exec /NOUNLOAD '"$2" /C "$mySqlDirectory\bin\mysqldump.exe" --user=$username --password=$password $dbName > $1' $0

Важно не включать путь "D:\ctvi.sql" как таковой в команду выполнения, а также не заключать переменную пути в кавычки. Вот почему я использовал $1, тоже без кавычек.

person nawfal    schedule 24.07.2012