Mysqldump通过ShellExecute无法正常工作

时间:2014-03-16 17:06:47

标签: delphi mysqldump

我试图通过使用ShellExecute运行mysqldump来从delphi备份我的mysql数据库。 这就是我使用mysqldump的方式:

MySqlDump.exe -u root  -p[password]  [databasename] > TheOutputFile.Sql

这可以从命令提示符开始。

我使用ShellExecute调用此命令行:

  ShellExecute(
    0,
    nil,
    'cmd.exe',
    'C:\SmartRetail\Test System\Periodic database backup\MySqlDump.exe -u root -p123    smartretailprogramdata > TheOutputFile2.Sql',
    nil,
    SW_SHOW
    );

这不起作用,而是打开命令提示符。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

它会打开命令解释器,因为cmd.exe是什么。您需要指定/C以告知cmd进程在解释您的命令后关闭。

最重要的是,您需要处理工作目录。除非.sql文件位于工作目录中,否则转储进程将无法找到它。并且工作目录是从父进程继承的,因为您没有指定它。您可能需要指定工作目录。

最后,ShellExecute在这里确实是错误的解决方案。您只是使用它来获取stdout重定向。但这应该明确地完成。请改用CreateProcess

答案 1 :(得分:0)

你可以诅咒:

var
    BatFile : TStringList;
    str: string;
const 
    EXEC  = 'MySqlDump.exe -u root  -p[password]  [databasename] > TheOutputFile.Sql' ;
begin
    BatFile := TStringList.Create;
    BatFile.Text := EXEC ;
    str := ExtractFilePath(Application.ExeName) + 's.bat';
    BatFile.SaveToFile(str);
    BatFile.Free;
    ShellExecuteW(Handle, 'open', PWideChar(str), nil, nil, SW_HIDE);
    Sleep(200);
    ShowMessage('Done.');
    DeleteFile(str);
end;