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 :

Comment exécuter une ligne de commande ?


Sujet :

C#

  1. #1
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut Comment exécuter une ligne de commande ?
    bonjour...
    je voudrais savoir comment executer une ligne de commande sous C#.
    je travaille avec FOP pour avoir des Fichiers PDF.
    voici ma commande :
    c:\fop...
    FOP -XML myfile.xml -XSL mysheat.xsl -pdf myresult.pdf

    merci pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    il faut utiliser la class Process (dans System.Diagnostics)
    fais une recherche dans le forum, il y a plein d'exemples

  3. #3
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tomlev Voir le message
    il faut utiliser la class Process (dans System.Diagnostics)
    fais une recherche dans le forum, il y a plein d'exemples
    y à pas de possibilité d'envoyer le résultat en streaming (pas sur disque)?
    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si, en utilisant ProcessStartInfo.RedirectStandardOutput, et l'évènement OutputDataReceived du process

  5. #5
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Si, en utilisant ProcessStartInfo.RedirectStandardOutput, et l'évènement OutputDataReceived du process
    SVP j'ai juste une petite question :
    y une erreur au niveau de mode code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.EnableRaisingEvents=false;
                proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP";
                proc.StartInfo.Arguments = "-xml Server.MapPath("\\donnees.fo") - xsl Server.MapPath("\\feuille.xsl") - pdf Server.MapPath("\\resultat.pdf")";
                proc.Start();
                proc.WaitForExit();
    pkoi il reconnait pas Server.MapPath("\\donnees.fo") dans cette commande.
    merci bien

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Les guillemets servent à délimiter une chaîne de caractères. Si tu as des guillemets dans un chaîne de caractères tu dois les échapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";

  7. #7
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Les guillemets servent à délimiter une chaîne de caractères. Si tu as des guillemets dans un chaîne de caractères tu dois les échapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
    j'ai une erreur il reconnais pas la commande, je pense pour les arguments, le programme s'excute mais y à rien comme resultat.

  8. #8
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Les guillemets servent à délimiter une chaîne de caractères. Si tu as des guillemets dans un chaîne de caractères tu dois les échapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
    +1 mais autant utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.FileName = @"C:\\fop-0.95beta\\FOP";
    tarekos prete attention au message se storminon.

  9. #9
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par zeavan Voir le message
    +1 mais autant utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.FileName = @"C:\\fop-0.95beta\\FOP";
    tarekos prete attention au message se storminon.
    l'invite dos s'excute avec les deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.FileName = @"C:\\fop-0.95beta\\FOP";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP";
    mais l'excution ne reconnais pas l'argument passé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.fo\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
    le resultat affiche des erreur dans l'invite DOS comme koi FOP à été executer sans commande !
    Merci bien

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Les espaces entre les tirets et la commande ne pourraient pas gêner ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - xsl Server.MapPath...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - pdf Server.MapPath...
    A mon avis çà ne doit pas trop lui plaire.

  11. #11
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Les espaces entre les tirets et la commande ne pourraient pas gêner ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - xsl Server.MapPath...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - pdf Server.MapPath...
    A mon avis çà ne doit pas trop lui plaire.
    illegal argument error creating inputHandler object

    je pense que j'ai tjr probleme avec les arguments

  12. #12
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Les espaces entre les tirets et la commande ne pourraient pas gêner ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - xsl Server.MapPath...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - pdf Server.MapPath...
    A mon avis çà ne doit pas trop lui plaire.
    vous avez raison c'etait un pb à cause des espaces -XML ???? - XSL ??
    - et la j'ai un autre probleme, j'ai dans mon application mes fichiers XML et XSL, alors il reconnais pas Server.MapPath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.xml\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";

  13. #13
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tarekos Voir le message
    vous avez raison c'etait un pb à cause des espaces -XML ???? - XSL ??
    - et la j'ai un autre probleme, j'ai dans mon application mes fichiers XML et XSL, alors il reconnais pas Server.MapPath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "-xml Server.MapPath(\"\\donnees.xml\") - xsl Server.MapPath(\"\\feuille.xsl\") - pdf Server.MapPath(\"\\resultat.pdf\")";
    je vous remercie j'ai trouvé la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    proc.EnableRaisingEvents=false;
                string fic_Xml = Server.MapPath("\\Donnees.xml");
                string fic_Xsl = Server.MapPath("\\feuille.xsl");
                string fic_Res_Pdf = Server.MapPath("\\resultat.pdf");
                string chemin = "-xml \""+fic_Xml+"\" -xsl \""+fic_Xsl+"\" -pdf \""+fic_Res_Pdf+"\"";
     
                proc.StartInfo.FileName = "C:\\fop-0.95beta\\FOP";
                proc.StartInfo.Arguments = chemin;
     
                proc.Start() ;
                proc.WaitForExit() ;
                proc.Close();
    merci beaucoup, si vous pouvez juste me donner l'intruction qui me permet de rediriger cette sortie en streaming .
    merci

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardOutput = true;
     
    ...
     
    StringBuilder sb = new StringBuilder();
    string line;
    while ((line = proc.StandardOutput.ReadLine()) != null)
    {
        text.AppendLine(line);
    }

  15. #15
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardOutput = true;
     
    ...
     
    StringBuilder sb = new StringBuilder();
    string line;
    while ((line = proc.StandardOutput.ReadLine()) != null)
    {
        text.AppendLine(line);
    }
    j'ai une erreur au niveau de l'excution de proc.Start().
    l'executable n'est pas une apli Win32.
    pn peux l'envoyer viya Response avec l'objet Memoire.....?

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    FOP est un fichier .bat, non ? Je ne suis pas sûr que tu puisses exécuter directement un .bat avec Process, du moins pas si UseShellExecute est à false (et il doit être à false pour pouvoir utiliser RedirectStandardOutput...). Par contre tu peux lancer cmd.exe en lui passant en paramètre le script .bat et les paramètres

  17. #17
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tomlev Voir le message
    FOP est un fichier .bat, non ? Je ne suis pas sûr que tu puisses exécuter directement un .bat avec Process, du moins pas si UseShellExecute est à false (et il doit être à false pour pouvoir utiliser RedirectStandardOutput...). Par contre tu peux lancer cmd.exe en lui passant en paramètre le script .bat et les paramètres
    oui FOP est un fichier BAT, et UseShellExecute est false !
    le programme tel qu'il a marche bien, il me genere bien avec process mon fichier PDF, mais je veux juste rendre ça en streaming.?
    merci

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben je t'ai montré comment récupérer la sortie (avec StandardOutput), après tu en fais ce que tu veux... qu'est-ce que tu veux dire par "rendre ça en streaming" ?

  19. #19
    Débutant  
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par tomlev Voir le message
    ben je t'ai montré comment récupérer la sortie (avec StandardOutput), après tu en fais ce que tu veux... qu'est-ce que tu veux dire par "rendre ça en streaming" ?
    ça veux dire , au lieu que FOP genere le fichir sur disque, je veux que ça soit en memoire et afficher en browser
    voila le type de sortie de fop qu'il supporte :

    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
    [OUTPUT]
     outfile           input will be rendered as PDF into outfile
     -pdf outfile      input will be rendered as PDF (outfile req'd)
     -pdfa1b outfile   input will be rendered as PDF/A-1b compliant PDF
                       (outfile req'd, same as "-pdf outfile -pdfprofile PDF/A-1b")
     
     -awt              input will be displayed on screen
     -rtf outfile      input will be rendered as RTF (outfile req'd)
     -pcl outfile      input will be rendered as PCL (outfile req'd)
     -ps outfile       input will be rendered as PostScript (outfile req'd)
     -afp outfile      input will be rendered as AFP (outfile req'd)
     -tiff outfile     input will be rendered as TIFF (outfile req'd)
     -png outfile      input will be rendered as PNG (outfile req'd)
     -txt outfile      input will be rendered as plain text (outfile req'd)
     -at [mime] out    representation of area tree as XML (outfile req'd)
                       specify optional mime output to allow AT to be converted
                       to final format later
     -print            input file will be rendered and sent to the printer
                       see options with "-print help"
     -out mime outfile input will be rendered using the given MIME type
                       (outfile req'd) Example: "-out application/pdf D:\out.pdf"
                       (Tip: "-out list" prints the list of supported MIME types)
     -mif outfile      input will be rendered as MIF (FrameMaker) (outfile req'd)
                       Experimental feature - requires additional fop-sandbox.jar.
     -svg outfile      input will be rendered as an SVG slides file (outfile req'd)
     
                       Experimental feature - requires additional fop-sandbox.jar.
     
     -foout outfile    input will only be XSL transformed. The intermediate
                       XSL-FO file is saved and no rendering is performed.
                       (Only available if you use -xml and -xsl parameters
    )

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si c'est du PDF que tu veux générer, tu ne peux pas l'inclure dans une page web : tu es obligé de générer le fichier et de renvoyer l'utilisateur vers l'URL du fichier.
    La technique expliquée ci-dessus permet de récupérer la sortie standard du programme (i.e. la sortie sur la console), ça ne s'applique pas ici...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment éxecuter une ligne de commande sous C#
    Par stardeus dans le forum Développement Web avec .NET
    Réponses: 3
    Dernier message: 28/02/2012, 17h17
  2. [Batch] Comment écrire une ligne de commande dans un autre batch ?
    Par pierrot91000 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/04/2011, 12h31
  3. [Système] Exécuter une ligne de commande
    Par fordprobe dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2007, 14h46
  4. Exécuter une ligne de commande dos
    Par koKoTis dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 20/08/2006, 07h03
  5. Comment lancer une ligne de commande dans un processus en Java.
    Par doyouknow56 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 13/05/2006, 11h55

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