CreateProcess调用mysqldump问题

3 篇文章 0 订阅

CreateProcess调用mysqldump问题

  • 使用CreateProcess调用mysqldump总是错误,有报找不到’>’不是表名称,也有报路径问题的,但是把backup放到cmd上运行又可以备份成功!这确实是比较奇怪的。找了蛮久资料,终于找到解决方案

    下面是问题代码:


string backup = "\"dir\\mysqldump.exe\" --no-defaults --lock-tables=false -uroot -pPassword -h localhost db_testname tbl_test > c:\\test.sql";

STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hOutWrite;                                              //   
si.hStdOutput = hOutWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcessW(NULL, (LPTSTR)backup.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, dir, &si, &pi))
{
   return false;
}

修改部分如下:

string backup = "cmd /c \"dir\\mysqldump.exe\" --no-defaults --lock-tables=false -uroot -pPassword -h localhost db_testname tbl_test > c:\\test.sql";

if (!CreateProcessW(NULL, (LPTSTR)backup.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, cmddir, &si, &pi))   /*cmddir是cmd路径*/

当保存的路径中有空格时,使用引号又不行了!
所以要把路径改为短路径:

TCHAR szShortPath[MAX_PATH] = { 0 };
DWORD dw = GetShortPathName(longPath.c_str(), szShortPath, MAX_PATH);

最后我想大概原因就是 ‘>’符号是cmd中使用的,mysqldump中是没有这个的。至于不能用引号来解决路径中有空格问题(cmd运行时可以用引号的),还不清楚。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值