Выполнить программу с перенаправлением вывода из Inno Setup - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь сделать резервную копию базы данных при удалении, но по какой-то причине программа с перенаправлением всегда терпит неудачу в Inno Setup. Вот что у меня есть:

[Run]
Filename: "{#DB_PATH}\mysqldump.exe"; \
  Parameters: "-c --compact {#DB_NAME} > {#STORAGE_PATH}\db.sql";  Flags: runhidden;
Filename: "xcopy";                     \
  Parameters: "{#STORAGE_PATH} {userdesktop}\Backup\ /E/H"; Flags: runhidden;
Filename: "{#DB_PATH}\mysqladmin.exe"; \
  Parameters: "shutdown"; Flags: runhidden;

Последние две команды работают правильно. Но первый никогда не работает по какой-то причине. Я уже проверил команду, и она работает без проблем.

Я не уверен, что делаю что-то не так, поэтому любая помощь приветствуется.

1 Ответ

1 голос
/ 26 февраля 2020

Кажется, это вариация:
Как работает перенаправление вывода в Inno Setup?

С небольшой разницей, что вы используете [Run] раздел, а не Pascal Код сценария.

Синтаксис перенаправления вывода является функцией командной строки, а не базовыми Windows API. Поэтому, если вы хотите перенаправить вывод, вам нужно вызвать команду через {cmd} /c actual-command-line > output-file.

Так должно быть:

Filename: "{cmd}"; \
  Parameters: "/C {#DB_PATH}\mysqldump.exe -c --compact {#DB_NAME} > {#STORAGE_PATH}\db.sql"; \
  Flags: runhidden;

Но вы должны также процитировать все пути (и из-за неясного синтаксиса, который использует cmd.exe, вам нужно также заключить в кавычки всю команду):

Filename: "{cmd}"; \
  Parameters: "/C """"{#DB_PATH}\mysqldump.exe"" -c --compact {#DB_NAME} > ""{#STORAGE_PATH}\db.sql"""""; \
  Flags: runhidden;
...