在c ++中通过shellexecute运行gbak.exe

时间:2010-11-01 12:13:03

标签: c++ shellexecute

我想从 MFC 应用程序运行gbak.exe文件来备份 firebird DB , 我使用这个订单,但它不起作用:

shellexecute(hwnd,"open","gbak.exe"," -user HAMED -password 1234 DB2.FDB b.fbk","",SW_SHOW);

我的问题是关于gbak和firebird。

每个人都可以帮助我吗? 感谢

4 个答案:

答案 0 :(得分:0)

尝试使用CreateProcess,如下所示:

STARTUPINFO si = { 0 };  
PROCESS_INFORMATION pi = { 0 };  

si.cb = sizeof(si); 

std::string sCommand = "gbak.exe -user HAMED -password 1234 DB2.FDB b.fbk"

BOOL bStart = ::CreateProcess(NULL,(LPSTR) sCommand.c_str(),NULL,NULL,FALSE,CREATE_NEW_CONSOLE | CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&si,&pi);

if (bStart)
{
 // Wait 2 minutes or something for the process to complete
 ::WaitForSingleObject(pi.hProcess,1000*(2*60));
 CloseHandle( pi.hProcess );
 CloseHandle( pi.hThread );
}else
{
  DWORD dwLast = GetLastError();
  printf("Error %d",dwLast);
}

答案 1 :(得分:0)

系统路径中gbak.exe所在的目录是什么?如果没有,请在调用%PATH%shellexecute时将其放入系统createprocess变量或指定完全限定的路径名​​。

答案 2 :(得分:0)

更改“gbk.exe”以使其成为完整路径。类似的东西:

c:\Program Files\thunderbird\gbak.exe"

另外,您将gbak.exe拼错为gbk.exe

答案 3 :(得分:0)

程序应与数据库断开连接,然后进行备份。