запустить gbak.exe от shellexecute в c ++ - PullRequest
0 голосов
/ 01 ноября 2010

Я хочу запустить gbak.exe файл из моего MFC приложения для резервного копирования Firebird DB , Я использую этот заказ, но он не работает:

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

Моя проблема связана с gbak и firebird.

каждый может мне помочь? Спасибо

Ответы [ 4 ]

0 голосов
/ 02 ноября 2010

Программа должна отключиться от Базы Данных, а затем вернуться обратно.

0 голосов
/ 01 ноября 2010

Является ли каталог, в котором находится gbak.exe, в вашем системном пути? Если нет, поместите его в переменную %PATH% вашей системы или укажите полное имя пути при вызове shellexecute или createprocess.

0 голосов
/ 01 ноября 2010

измените "gbk.exe" так, чтобы это был полный путь.Что-то вроде:

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

Также вы ошиблись gbak.exe как gbk.exe

0 голосов
/ 01 ноября 2010

Попробуйте вместо этого использовать 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);
}
...