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

Développement Windows Discussion :

VS2010 Application Console "process ne repond pas"


Sujet :

Développement Windows

  1. #1
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut VS2010 Application Console "process ne repond pas"
    Bonjour,

    Je developpe une application console qui appelle un exe externe (ofc.exe) pour convertir mes documents office.

    ofc.exe fonctionne sans soucis quand je le lance depuis l'invite de commande.

    Quand je lance ofc.exe depuis mon application sur le meme groupe de fichier celui se met en etat "ne repond pas" et ne finit pas les conversions.

    Je suppose que c'est lie a un timeout.
    La conversion sur mes fichiers de test prend 5 min ce qui n'est pas aberrants.


    Que puis je faire pour eviter ce blocage?

    D'avance merci.

    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
     
     try
                    {
                        Console.WriteLine(" *** Debut Conversion ***");
     
                        Process ofcProcess = new Process();
                        ofcProcess.StartInfo.FileName = "c:/temp/ompm/tools/ofc.exe";
                        ofcProcess.StartInfo.Arguments = "c:/temp/ompm/tools/ofc.ini";
     
                        ofcProcess.StartInfo.CreateNoWindow = false;
                        ofcProcess.StartInfo.UseShellExecute = false;
                        ofcProcess.StartInfo.RedirectStandardError = true;
                        ofcProcess.StartInfo.RedirectStandardOutput = true;
                        ofcProcess.Start();
     
                        LogFichier.Ecrire(ofcProcess.StandardError.ReadToEnd());
     
                        LogFichier.Ecrire(ofcProcess.StandardOutput.ReadToEnd());
     
                        ofcProcess.WaitForExit();
                        int exitCode = ofcProcess.ExitCode;
     
                        Console.WriteLine(" *** Fin Conversion ***");
                    }
                    catch (Win32Exception e)
                    {
                            Console.WriteLine(e.Message);
                    }
    PS l'application ne rentre jamais dans le catch

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Visiblement, dans l'environnement d'exécition que tu crée pour ofc.exe,il lu manque "quelque chose" et il doit envoyer un message d'erreur ou être en attente d'une action utilisateur.

    Comme tu fait un readtoend du strandard output, tu ne peux pas la capter (car ce standard output n'est jamais libéré).

    Essaye en redirigeant tes standards I/O vers un Pipe pour visualiser ce qui se passe.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Ce qui est bizarre c'est que quand je lance directement ofc dans l'invite de commande tout se passe tres bien sans bloquage quelconque.

    Bon j'essaye de rediriger la sortie vers un pipe mais c'est pas gagne. :s

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par xian21 Voir le message
    Ce qui est bizarre c'est que quand je lance directement ofc dans l'invite de commande tout se passe tres bien sans bloquage quelconque.
    Cela n'a rien de bizarre : dans une invite de commande, tu as par exemple un jeu de variable d'environnement, un path par défaut, etc ...

    Or, là tu n'as rien de tout cela.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Cela n'a rien de bizarre : dans une invite de commande, tu as par exemple un jeu de variable d'environnement, un path par défaut, etc ...

    Or, là tu n'as rien de tout cela.
    Okyp merci.
    Du coup j'ai essaye de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofcProcess.StartInfo.FileName = "c:/temp/ompm/tools/dir";
    et ca marche pas effectivement.

    Par contre je viens de changer mon code (cf ci dessous) pour ne plus intercepter le flux de sortie


    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
     
    Console.WriteLine(" *** Debut Conversion ***");
     
     
     
                    Process myProcess = new Process();
                    ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("c:/temp/ompm/tools/ofc.exe", "c:/temp/ompm/tools/ofc.ini");
     
     
                    myProcessStartInfo.UseShellExecute = false;
                    myProcessStartInfo.RedirectStandardError = true;
                    myProcess.StartInfo = myProcessStartInfo;
                    myProcess.Start();
     
                    StreamReader myStreamReader = myProcess.StandardError;
                    // Read the standard error of net.exe and write it on to console.
                    Console.WriteLine(myStreamReader.ReadLine());
     
                    myProcess.Close();
     
                    Console.WriteLine(" *** Fin Conversion ***");
                    Console.ReadKey(true);

    et la la conversion fonctionne sans problème (sans aucune intervention de ma part)....
    Je trouve ca quand même bizarre que le fait de changer le flux de sortie change quelque chose.

    Sinon mon but etait d'enregistrer dans un fichier la sortie de ofc.exe. Et la ca s'affiche dans la console ... du coup je ne sais pas comment faire pour l'enregistrer dans un fichier.
    Je n'arrive pas a faire un pipe... :s

  6. #6
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Pour mon blocage je pense que ca vient de la:

    L'exemple de code évite une condition d'interblocage en appelant p.StandardOutput.ReadToEnd avant p.WaitForExit.Une condition d'interblocage peut se produire si le processus parent appelle p.WaitForExit avant p.StandardOutput.ReadToEnd et le processus enfant écrit suffisamment de texte pour remplir le flux redirigé.Le processus parent attend indéfiniment que le processus enfant se termine.Le processus enfant attend indéfiniment que le parent lise le flux StandardOutput en entier.
    cf
    http://msdn.microsoft.com/fr-fr/libr...VS.100%29.aspx

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/03/2012, 18h31
  2. [WS 2008] Application console : copier / coller ne fonctionne pas
    Par omar9571 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 16/02/2012, 06h13
  3. Application console DotNet 2.0 bloqué, pas d'exception levée
    Par Ozanges dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/11/2007, 11h15
  4. Mes applications console ne s'éxecutent pas
    Par mok16 dans le forum C++
    Réponses: 14
    Dernier message: 12/01/2007, 23h54
  5. mes applications consoles ne fonctionnent pas
    Par mok16 dans le forum C++Builder
    Réponses: 1
    Dernier message: 10/01/2007, 14h22

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