IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Problème avec CreateProcess


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut Problème avec CreateProcess
    Bonjour,

    j'ai trouvé dans la faq un code montrant comment utiliser createprocess mais je ne comprend pas pourquoi il ne marche jamais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    	STARTUPINFO         siStartupInfo;
    	PROCESS_INFORMATION piProcessInfo;
     
    	memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    	memset(&piProcessInfo, 0, sizeof(piProcessInfo));
    	siStartupInfo.cb = sizeof(siStartupInfo);
    	if(CreateProcess((LPCWSTR)"c:\\windows\\NOTEPAD.EXE",(LPWSTR)
    							   "c:\\monfic",0,0,FALSE,
    							   CREATE_DEFAULT_ERROR_MODE,0,0,                              
    							   &siStartupInfo,&piProcessInfo) == FALSE)
    	{
    		System::Windows::Forms::MessageBox ^ message;
    		message->Show("impossible de lancer l'apprentissage");
    	}
    	else
    	{
    	   // attente
    	   WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
     
    	   CloseHandle(piProcessInfo.hThread);
    	   CloseHandle(piProcessInfo.hProcess);
    	}
    les seules choses que j'ai changé par rapport au code de la FAQ, ce sont les 2 casts (LPCWSTR) car il me mettait en erreur "impossible de convertir const char en LPCWSTR"... j'ai aussi ajouté un messagebox en cas d'erreur et il apparait toujours ! (alors que mon fichier existe bien sur...)

    un idée?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les casts entre char et wchar_t, c'est mal.
    Tu dois soit appeler explicitement CreateProcessA(), soit utiliser des TCHAR.

    De plus, le second paramètre de CreateProcess() ne doit PAS être une chaîne littérale.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    	STARTUPINFO         siStartupInfo;
    	PROCESS_INFORMATION piProcessInfo;
     
    	memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    	memset(&piProcessInfo, 0, sizeof(piProcessInfo));
    	siStartupInfo.cb = sizeof(siStartupInfo);
    	TCHAR cmdLine[] = _T("c:\\monfic");
    	BOOL created = CreateProcess(_T("c:\\windows\\NOTEPAD.EXE"), cmdLine,
    	 0,0,FALSE,
    	 CREATE_DEFAULT_ERROR_MODE,0,0,                              
    	 &siStartupInfo,&piProcessInfo
    	 );
    	if(!created)
    	{
    		System::Windows::Forms::MessageBox ^ message;
    		System::Windows::Forms::MessageBox::Show(L"impossible de lancer l'apprentissage");
    	}
    	else
    	{
    		// attente de fin du processus.
    		WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
     
    		CloseHandle(piProcessInfo.hThread);
    		CloseHandle(piProcessInfo.hProcess);
    	}
    PS: Si tu es en .Net, tu devrais plutôt utiliser la classe System:iagnostics:rocess...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. problème avec createProcess
    Par splifo dans le forum C
    Réponses: 2
    Dernier message: 27/05/2008, 15h30
  2. problème avec createProcess
    Par splifo dans le forum Windows
    Réponses: 2
    Dernier message: 27/05/2008, 15h30
  3. [MT] Problème avec CreateProcess
    Par rzayani dans le forum C++
    Réponses: 4
    Dernier message: 03/05/2007, 18h28
  4. Problème avec CreateProcess.
    Par Trap D dans le forum Visual C++
    Réponses: 4
    Dernier message: 20/12/2006, 22h44
  5. Problème avec CreateProcess
    Par maxplusplus dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/07/2005, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo