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

MFC Discussion :

problème création de process


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut problème création de process
    Bonjour,

    je fais un service windows qui a pour but de lancer des exe à intervalle de temps régulier. Pour cela, je créé un nouveau process:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    strExec = "\"C:\\test.exe\"<\"c:\\tmp\\test.txt\"";
    if ( ! CreateProcess(NULL, strExec.GetBuffer(1000), NULL, NULL, FALSE, 0, 0, 0, &si, &(pi[i])) ) 
    ...
    Or, quand je lance le programme l'exe ne s'exécute pas (ou pas correctement). Cependant, si je copie la valeur qu'il y a dans strExec dans une commande Dos, tout fonctionne correctement. Comment ca se fait? Si quelqu'un pouvait m'aider ...
    Merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    CreateProcess ne renvoit pas d'erreur ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    non il fait comme si tout se passait normalement. Il passe pas dans le if

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    c'est souvent un problème les redirections dos ...

    Tu peux sinon utiliser l'interpréteur de commande comme astuce

    Lancer la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.exe /C test.exe < test.txt

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    la lancer de quelle facon ?
    Dans le createprocess ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    La redirection de l'entrée avec "<" ne se fait pas toute seule, c'est le shell(cmd.exe) qui le fait dans ce cas. Donc soit tu le lances ainsi comme t'as donné nico, soit tu fais la redirection à la main:
    - ouvre le fichier avec CreateFile
    - donne le handle comme flux d'entrée hStdInput au process à lancer via le STARTUPINFO donné à CreateProcess
    - fermer le fichier avec CloseHandle
    on a parlé de ça ici y'a pas très longtemps il me semble, fait une recherche!

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    ca ne marche toujours pas

    voila mon code :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    for (int i = 0; i < nbFile; i++)
    {
    	strExec = "\"C:\\test.exe\"";
    	lstrcpy(lpFileName, "C:\\test.txt");
     
    	//récupération du fichier d'entrée pour le passer au process
    	hFichierIn = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    	if( hFichierIn == INVALID_HANDLE_VALUE) 
    		return false; 
     
    	//remplissage du startupinfo
    	memset(&si, 0, sizeof(STARTUPINFO)); 
    	si.cb = sizeof(STARTUPINFO); 
    	si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES; 
    	si.wShowWindow = SW_SHOW; 
    	si.hStdInput = hFichierIn; 
     
    	//création du process
    	if ( ! CreateProcess(NULL, strExec.GetBuffer(1000), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &(pi[i])) ) 
    	{
    		cout << strExec.GetBuffer(1000) << endl;
    		FormatMessage(
    			FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    			FORMAT_MESSAGE_FROM_SYSTEM,
    			NULL,
    			GetLastError(),
    			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    			(LPTSTR) &lpMsgBuf,
    			0, NULL );	
     
    		printf( "CreateProcess failed (%s).\n", lpMsgBuf);
    		LocalFree(lpMsgBuf);
    		return false; 
    	}
    	//si tout est ok on récupère le HANDLE
    	hProcessInfo[i] = pi[i].hProcess;
    }
     
     
    WaitForMultipleObjects(nbFile, hProcessInfo, true, 20000);
     
    /* vérification que les process sont terminés, 
    fermeture des Handles, sauvegarde des données des fichiers traités 
    et suppression de ces derniers*/
    for (int j = 0; j < nbFile; j ++)
    {
    	GetExitCodeProcess(hProcessInfo[j], &dwExitCode);
    	if(dwExitCode == STILL_ACTIVE) //process toujours présent ?
    	{
    		// toujours la.
    		TerminateProcess(hProcessInfo[j], -1);
    	}
    	CloseHandle(hProcessInfo[j]);
     
     
     
    	lstrcpy(lpFileName, "C:\\test.txt");
    	if (FileIn.Open(lpFileName, CFile::modeRead, NULL))
    	{
    		char	pbuf[500];
    		lstrcpy(lpFileName, sCheminL);
    		if (FileOut.Open(lpFileName, CFile::modeNoTruncate|CFile::modeWrite , NULL))
    		{
    			while (FileIn.Read( pbuf, 500 ) > 0)
    			{
    				FileOut.Write( pbuf, 500 );
    				strcpy(pbuf, "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ");
    			}
    			FileOut.Close();
    		}
    		FileIn.Close();
    	}
    	//CFile::Remove("C:\\test.txt");
    }
    Pouvez vous me dire s'il y a quelquechose qui ne va pas ?

Discussions similaires

  1. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29
  2. Problème création et destruction de processus.
    Par loupdeau dans le forum MFC
    Réponses: 5
    Dernier message: 08/04/2005, 13h33
  3. [C#] - Problème ProgressBar et Process ?
    Par clemc dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/06/2004, 10h45
  4. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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