2010-11-01 16 views
0

Je veux exécuter le fichier gbak.exe de mon application MFC pour sauvegarder firebird DB, -je utiliser cet ordre, mais cela n'a pas fonctionné:course gbak.exe par shellexecute en C++

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

ma Le problème concerne gbak et firebird.

peut tout m'aider? Merci

+0

une erreur? Vous avez? – Svisstack

+0

Afficher le résultat GetLastError() – Abyx

Répondre

0

Essayez d'utiliser CreateProcess à la place, quelque chose comme ceci:

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); 
} 
+0

mon application est basée sur MFC. – darya611

+0

CreateProcess est un appel de fonction Win32, pas de problème pour l'utiliser depuis une application MFC. – ROAR

+0

J'ai utilisé ce code et le programme est allé à if (bstart) mais à la fin du fichier b.fbk ne se termine pas dans mon dossier de l'application. – darya611

0

est le répertoire où gbak.exe est situé dans votre chemin système? Si ce n'est pas le cas, placez-le dans la variable %PATH% de votre système ou spécifiez un nom de chemin qualifié complet lorsque vous appelez shellexecute ou createprocess.

+0

gbak.exe se trouve dans le dossier de l'application – darya611

0

changez "gbk.exe" pour qu'il s'agisse d'un chemin d'accès complet. Quelque chose comme:

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

En outre, vous avez mal orthographié gbak.exe comme gbk.exe

+0

mais gbak se trouve dans le dossier de l'application. – darya611

+0

Mais cela fonctionne-t-il si vous incluez le chemin complet? –

0

programme devrait se déconnecter de la base de données, puis redonner place.