2009-07-23 10 views
1

Je dois excecuter un exe qui est disponible dans un lecteur comment puis-je faire cela en utilisant C++ ??Comment créer un processus en C++ pour exécuter exe?

que je fais comme ça

#include <stdio.h> 
#include <conio.h> 
#include <windows.h> 

void main() 
{ 
    STARTUPINFO si; 

    PROCESS_INFORMATION pi; 

    ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 
    ZeroMemory(&pi, sizeof(pi)); 

    if(!CreateProcess(L"c:\\DOTNET.exe",NULL,NULL, NULL,FALSE, 0,NULL,NULL,&si,&pi)) 
    { 
     printf("CreateProcess failed (%d).\n", GetLastError()); 
    } 
    else 
    { 
     printf("Prcess Creation Success"); 
    } 

    WaitForSingleObject(pi.hProcess, INFINITE); 
    CloseHandle(pi.hProcess); 
    CloseHandle(pi.hThread); 

    getch(); 
} 

Mais chaque fois qu'il montre la création de processus ayant échoué avec le code d'erreur 2 (ie ne peut pas trouver le chemin spécifié) mais je placer le DOTNET.exe à c: \ DOTNET .exe seulement.

ce qui est faux dans ce qui précède code.can quelqu'un me suggérer ...

Toute aide est grandement appréciée ..

Thabks à l'avance.

+0

est la différence entre c: \ et c: \\ juste une faute de frappe? Et avez-vous essayé le système (...) au lieu de CreateProcess (...)? – Beta

+0

Pouvez-vous exécuter "c: \\ dotnet.exe" à partir de la ligne de commande? –

+0

Je suis testé, il fonctionne correctement à partir de la ligne de commande. – Cute

Répondre

1

Je viens de tester votre code et il travaille ici avec:

if(!CreateProcess(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",NULL,NULL, NULL,FALSE, 0,NULL,NULL,&si,&pi)) 

A C++/solution Win32 pour votre C/code Win32 :)

void ExecuteAndWait (wstring toto) 
{ 
    STARTUPINFO si = { sizeof(si) }; 
    PROCESS_INFORMATION pi; 
    vector<TCHAR> V(toto.length() + 1); 
    for (int i=0;i< (int) toto.length();i++) 
    V[i] = toto[i]; 
    CreateProcess(NULL, &V[0],0, 0, FALSE, 0, 0, 0, &si, &pi); 
    WaitForSingleObject(pi.hProcess, INFINITE); 
    CloseHandle(pi.hProcess); 
    CloseHandle(pi.hThread); 
} 
0

Générez-vous un exécutable Unicode? Essayez plutôt _T ("C: \\ DOTNET.exe").

Ou est-ce que votre DOTNET.exe a des DLL dépendantes qui ne sont pas trouvées?

0

Je pense que vous devez appeler CreateProcess() différemment.

Essayez ceci;

if (!CreateProcess(NULL, L"C:\\DOTNET.exe", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi)) 
+0

puis il donne l'exception comme Exception non gérée à 0x77e4ba89 dans CreateProc.exe: 0xC0000005: Emplacement d'écriture de violation d'accès 0x00415696. – Cute

+0

Hmmm ... Je vais continuer à le regarder et voir si je peux reproduire votre problème, au moment où il fonctionne dans mon application de test. –

Questions connexes