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 :

Redirection entrée standart non prise en compte


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut Redirection entrée standart non prise en compte
    Salut,

    Toujours et encore des processus qui m'embêtent , j'ai l'impression d'avoir tout fait mais rien ne se passe.

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.RedirectStandardInput = true;
    myProcess.Start();
     
    myProcess.StandartInput.WriteLine("unMotDePasse");
    myProcess.StandartInput.Close();
    myProcess.Close();
    le processus lancé est un process demandant un mot de passe. La sortie console est :
    Enter your password :

    le problème c'est que le myProcess.StandartInput.WriteLine("unMotDePasse"); n'est pas pris en compte et je suis obligé d'entrée au clavier le mot de passe. Quelqu'un a-t-il une idée?

  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
    Ta sortie de console n'est pas associé à l'entrée standard.
    Tu as beau redirigé l'entrée, cela ne l'ecris pas dans la sortie de Enter your password :

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Euh,

    j'ai peur de ne pas avoir compris ton explication.
    myProcess.StandartInput.WriteLine("motDePasse"); n'écrit pas dans l'entrée standart de enter your password? il faut l'écrire sur sa sortie standart (ce qui est impossible par ailleurs)

  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
    Oui en fait ce que je veut dire, c'est que la sortie de enter machin et l'entrée standard du process -> je ne pense pas que cela est matché.
    Bref en gros tu ecris dans le vide et pas dans la sortie de enter machin.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Je suis peut-être idiot mais la je ne comprend vraiment pas.
    Je réexplique tout!
    Process1 = le processus de mon appli
    Process2 = le processus lancé par mon appli.

    le but de process1 : control les E/S du process2
    le but du process2: acitver une connexion ssh a partir d'un mot de passe (le login est passé en argument)

    dans process1 je fait bien process2.RedirectStandartInput = true; donc théoriquement, taper sur le clavier ne sert plus à rien pour process2

    dans process1 je fait process2.StandartInput.WriteLine("motDePasse"); ce qui a pour effet, je pense, d'envoyer "motDePasse" sur l'entrée standart de process2

    Process2, une fois lancé, écrit sur sa sortie standart : "Enter your password" jusqu'a la rien d'anormal je n'est pas redirigé sa sortie standart.

    dans Process2, théoriquement, arrive le "motDePasse" qui vient de process1. théoriquement aussi, cette arrivé devrait valider le de passe et passer à la suite dans process2 or ce n'est pas le cas.

    Donc la, je ne comprend pas pourquoi tu me dis que je n'ai pas redirigé la sortie standart de ma conole. Dans les deux cas, autant pour process1 que pour process2, je n'est besoin de leur sortie standart?

  6. #6
    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
    dans process1 je fait process2.StandartInput.WriteLine("motDePasse"); ce qui a pour effet, je pense, d'envoyer "motDePasse" sur l'entrée standart de process2
    Faux

    Tu modifies l'entrée standard pas la sortie standard.

    Vois tes processus comme deux tunnels.
    Chacun à son entrée et sa sortie.
    C'est leurs entrées standars et sorties standards.

    Si le clavier correspond à la route1, l'entrée standars de tes processus c'est la route1.
    La sortie n'a pas bougé (en général la console dos) on va dire la route2 pour la sortie des deux fichiers.

    Donc redirigé l'entrée standard de ton process 1 va faire que la rout3 (ton string) deviendra l'entrée de ton process1.

    Si tu ne fait que cela, bah ton string va sortir sur la sortie standard, qui est la console et non l'entrée de ton second process !!!

    Donc faut rediriger l'entrée du second process sur la sortie du premier process.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Faut que tu me donne un exemple je comprend pas.

    Donc redirigé l'entrée standard de ton process 1 va faire que la rout3 (ton string) deviendra l'entrée de ton process1.
    je n'ai pas redirigé l'entrée standart de process1 dans mon code, si?

  8. #8
    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
    myProcess.StartInfo.RedirectStandardInput = true;
    C'est une redirection d'entrée pas de sortie
    dans process1 je fait bien process2.RedirectStandartInput = true; donc théoriquement, taper sur le clavier ne sert plus à rien pour process2

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Ou alors j'ai pas compris ce que voulais dire la propriété RedirectStandartInput

    quand je fait process2.StartInfo.RedirectStandartInput = true; j'indique quoi exactement?

    Moi je pensais que cela signifiait que je redirigeait l'entrée standart de process2 vers le flux process2.StandartInput;
    Est-ce cela ou bien cette propriété à pour effet de redirigé l'entrée de process2 vers celle de process1?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Euh!
    myProcess = Process2 pas process1

    et si c'était déjà clair, j'aimerais avoir un exemple de code écrit dans process1 qui écrit sur l'entrée standart de process2

  11. #11
    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
    ok je m'etais perdu avec process1 et 2.

    Bon reprenons :
    process 2 : entrée redirigé et sortie non.

    Process 2 demande le mot de passe et attends.
    Une fenêtre winform ? Une console dos ?

    tu envois grâce à la redirection de l'entrée un string.

    Et cela ne marche pas.

    Si le process est une application console, je pense que l'entrée standard du process et branché à l'entrée standard de la fenêtre représentant la console, mais n'est pas l'entrée standard de la console.
    De même pour la sortie standard.
    Donc tes redirections coupent la liaison.
    Et lorsque tu fais un Console.ReadLine, je pense que cela regarde sur l'entrée standard de la console et pas du process.
    Donc l'idée serait de récupérer le handle de la console dos, et de faire une redirection de l'entrée standard de la console dos.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Ce n'est ni une appli console ni une appli windows! car j'ai mis la propriété CreateNoWindows = true;
    Et l'exemple msdn sur la redirection montre que les redirection ne passe pas par la console.
    http://msdn2.microsoft.com/fr-fr/lib...ut(VS.80).aspx

  13. #13
    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
    As tu essayé l'exemple sans rien modifier ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 141
    Points : 110
    Points
    110
    Par défaut
    Et ben voilà! C'est bien ma veine! L'exemple msdn fonctionne et j'ai compris (ou pas vraiment) pourquoi ca marche pas.

    En fait, mon prog fonctionne normalement et sans surprise avec des commande classiques et bien codé mais avec celle que j'utilisait, impossible à faire entendre raison! Quelque chose doit empêcher les redirections.

    Cela dit, ca ne m'étonnerais pas que les redirection fonctionnent que si on redirige des E/S de programme .net. Ca se trouve ca ne fonctionne pas avec les programme C, C++ non managé, etc...

  15. #15
    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
    Dans l'exemple le process lancé est à mon avis loin d'être un prog .net
    A mon avis c'est un programme compilé.
    Donc c'est de l'assembleur.

    la seule différence flagrente que je vois entre vos deux code c'est cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StreamWriter myStreamWriter = myProcess.StandardInput;

Discussions similaires

  1. Variable d'entrée non prise en compte
    Par Aldous dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/09/2011, 14h15
  2. [VxiR2] Jointure entre 2 tables non prise en compte dans requête BO
    Par Geo55 dans le forum Designer
    Réponses: 3
    Dernier message: 10/06/2011, 17h37
  3. [css] Feuille de style non prise en compte
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/06/2005, 11h49
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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