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# Discussion :

[c#] Soucis sur les processus


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Points : 29
    Points
    29
    Par défaut [c#] Soucis sur les processus
    Bonjour,

    J'ai un fichier exe, qui va executer (sous un windows XP et/ou 2003) un autre exe (batch console), qui malheureusement ne renvoie rien à l'écran.

    j'essaye donc de modifer l'appli pour qu'elle vérifie si le programme lancé par l'appli 1 vérifie de temps à autres que l'appli 2 tourne toujours... Si c'est terminé, alors on peut passer à la suite ...

    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
     
    bool v_testProcess = false ;
    string v_Output = "" ;
    [...]
    System.Diagnostics.Process v_prc = new System.Diagnostics.Process ();
    v_prc.EnableRaisingEvents = true;
     
    v_prc.StartInfo.FileName = "monfichier.exe" ;
    v_prc.StartInfo.Arguments = "monargument" ;
    v_prc.StartInfo.RedirectStandardOutput = true ;
    v_prc.StartInfo.ErrorDialog = false;
    v_prc.StartInfo.UseShellExecute = false; 
     
     try
     {
        /* PART 1 / EXE DU BATCH */
        // execute le process (batch + fichier)
        v_prc.Start ();
        while (!v_testProcess)
        {
           if (v_prc.HasExited)
           {
              v_Output = v_prc.StandardOutput.ReadToEnd().ToString();
              v_testProcess = true ;
           }
           v_prc.WaitForExit(20);
        }
           // creation du fichier Logfile
           string v_logfile = "LogMonFichier" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log" ;
           FileStream fs = new FileStream(pRepLogs + "\\" +  v_logfile,FileMode.Append);
           StreamWriter sw = new StreamWriter(fs);
           sw.Write(v_Output);
           sw.Close();
           fs.Close();	    
     
     
    }
    catch 
    {
    [...]
    v_prc.Close (); 
    v_prc.Dispose ();
    }
    Sauf que ca n'a pas trop l'air de fonctionner :
    le 1er programme reste bien en exécution ..
    mais le 2e a l'air de s'interrompre, car je ne le vois plus dans le gestionnaire des tâches (le traitement est long, il dure plus d'une heure).

    Bref, si vous avez des idées ..
    Merci d'avance,
    K.

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Le problème est peut être dans le code de l'appli 2.

    Autrement je n'aurais pas mis la creation du fichier et sa fermeture dans la boucle !!!!!!

    Ouvre le en Append une fois pour toute avant la boucle et ferme le après la boucle !!!!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Oups, c'était un soucis lors de mon copier coller .. car j'ai supprimé une portion de code.
    J'ai corrigé dans mon précédent post.

    L'appli 2 fonctionne parfaitement, si je la lance en ligne de commande.

    Par contre peux tu me préciser le Append ?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Par contre peux tu me préciser le Append ?
    Heu.... Tu l'as utilisé :
    FileMode.Append
    Pour écrire à la suite du texte dans le fichier.

    As tu une exception qui est attrapé ?
    Es tu sur que le deuixème programme est lancé ?

    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_prc.StartInfo.ErrorDialog = true;
    A true si le process ne se lance pas une boite de dialogue est sensé apparaitre. Bien que je ne sache pas si ce sera le cas du fait de ton try.

    Là que ce soit ainsi ou en rajoutant des console.writeline dans le catch, essaye de voir au mx si ton prog2 te balance une exception, et s'il démarre

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    ESt ce que tu passe dans le catch ou pas ?

    Vire peut être le try catch pendant la mise au point, ça évite de masquer des erreurs et de chercher un truc qui saute aux yeux.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Bonjour et bonne année à tous.

    Bon après quelque temps d'absence, me revoila avec de bonnes nouvelles, j'ai trouvé !
    Je voulais faire trop compliqué .. mais fallait pas .

    Le code suivant ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while (!v_testProcess)
        {
           if (v_prc.HasExited)
           {
              v_Output = v_prc.StandardOutput.ReadToEnd().ToString();
              v_testProcess = true ;
           }
           v_prc.WaitForExit(20);
        }
    ne servait à rien, il suffisait juste de garder ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v_Output = v_prc.StandardOutput.ReadToEnd().ToString();
    v_testProcess = true ;
    Voila !

    A bientot pour de prochaines prises de têtes
    K.

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (v_prc.HasExited)
           {
              v_Output = v_prc.StandardOutput.ReadToEnd().ToString();
              v_testProcess = true ;
           }
    Tien je n'avais pas fait gaffe, mais tu ne faisais la configuration du ouput que si le process s'était arrêté. Pas près de marcher
    il aurait mieux valu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!v_prc.HasExited)
           {
              v_Output = v_prc.StandardOutput.ReadToEnd().ToString();
              v_testProcess = true ;
           }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. soucis sur les USER DEFINED DATA TYPE
    Par f_bobo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 15h53
  2. [2000] Activité en cours\Informations sur les processus
    Par Débéa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h42
  3. demande d'information sur les processus sql server
    Par patrick B dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/11/2005, 14h04
  4. Agir à distance sur les processus des utilisateurs
    Par kuranes dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 11/10/2005, 10h18

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