从 Inno Setup 执行带有输出重定向的程序
Execute program with output redirection from Inno Setup
我正在尝试在卸载时进行数据库备份,但由于某些原因,带有重定向的程序在 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;
最后两个命令运行正常。但由于某种原因,第一个永远不会奏效。我已经测试了该命令,它可以正常工作。
我不确定我是否做错了什么,所以感谢您的帮助。
这似乎是以下内容的变体:
How does output redirection work in Inno Setup?
略有不同,您使用的是 [Run]
部分而不是 Pascal 脚本代码。
The output redirection syntax is a feature of the command prompt, not the core Windows APIs. Therefore if you want to redirect output then you need to invoke the command via {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;
我正在尝试在卸载时进行数据库备份,但由于某些原因,带有重定向的程序在 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;
最后两个命令运行正常。但由于某种原因,第一个永远不会奏效。我已经测试了该命令,它可以正常工作。
我不确定我是否做错了什么,所以感谢您的帮助。
这似乎是以下内容的变体:
How does output redirection work in Inno Setup?
略有不同,您使用的是 [Run]
部分而不是 Pascal 脚本代码。
The output redirection syntax is a feature of the command prompt, not the core Windows APIs. Therefore if you want to redirect output then you need to invoke the command via
{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;