Interagir avec une application en ligne de commande

Le
Nicolas B.
Bonjour,

J'essaie de faire un programme qui utilise une application fonctionnant
en ligne de commande, mais je ne sais pas comment faire pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages qu'elle
répondrait si elle était lancée dans une invite de commande.

Merci,


Nicolas
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred
Le #12226651
Dans : news:,
Nicolas B. disait :
Bonjour,



Bonjour,

J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un
label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Nicolas B.
Le #12226631
Je n'ai pas encore testé, mais je pense que c'est exactement ce qu'il me
faut. Merci !

Bonne journée,


Nicolas

Fred a écrit :

Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class



Nicolas B.
Le #12226611
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est un
peu plus compliqué : l'application que je lance en ligne de commande me
pose des questions (du type "Voulez-vous écraser les fichiers ?") et je
dois y répondre ("> oui"). Il faudrait que j'arrive à la fois à
récupérer dans mon programme les questions que me pose l'application
lancée et répondre à ces questions, là aussi à partir de mon programme.

Est-ce faisable ?

Merci,


Nicolas

Fred a écrit :
Dans : news:,
Nicolas B. disait :
Bonjour,



Bonjour,

J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class



OlivierH
Le #12226601
Il faudrait connaitre les options de lancement de ton appli
L'option silent en general => monappli.exe /s

Olivier

Nicolas B. a écrit :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est un
peu plus compliqué : l'application que je lance en ligne de commande me
pose des questions (du type "Voulez-vous écraser les fichiers ?") et je
dois y répondre ("> oui"). Il faudrait que j'arrive à la fois à
récupérer dans mon programme les questions que me pose l'application
lancée et répondre à ces questions, là aussi à partir de mon programme.

Est-ce faisable ?

Merci,


Nicolas

Fred a écrit :

Dans : news:,
Nicolas B. disait :

Bonjour,



Bonjour,


J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class






Fred
Le #12226591
Dans : news:%,
Nicolas B. disait :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est
un peu plus compliqué : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous écraser les
fichiers ?") et je dois y répondre ("> oui"). Il faudrait que
j'arrive à la fois à récupérer dans mon programme les questions que
me pose l'application lancée et répondre à ces questions, là aussi à
partir de mon programme.

Est-ce faisable ?



Oui sans doute, mais je n'ai pas testé.
Il existe également RedirectStandardInput et le StreamWriter
StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
éventuellement écrire une réponse sur le InputStream.
Attention, il faut gérer la lecture caractère par caractère car
lorsque'une question est posée, elle peut l'être avant le retour à la
ligne.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Nicolas B.
Le #12226551
Je vais essayer de m'en sortir en utilisant à la fois le StreamReader et
le StreamWriter, mais ça va effectivement être un peu plus compliqué...


Bonne soirée,

Nicolas

Fred a écrit :
Dans : news:%,
Nicolas B. disait :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est
un peu plus compliqué : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous écraser les
fichiers ?") et je dois y répondre ("> oui"). Il faudrait que
j'arrive à la fois à récupérer dans mon programme les questions que
me pose l'application lancée et répondre à ces questions, là aussi à
partir de mon programme.

Est-ce faisable ?



Oui sans doute, mais je n'ai pas testé.
Il existe également RedirectStandardInput et le StreamWriter StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
éventuellement écrire une réponse sur le InputStream.
Attention, il faut gérer la lecture caractère par caractère car
lorsque'une question est posée, elle peut l'être avant le retour à la
ligne.



OlivierH
Le #12226511
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Si tu veux , tu peux utiliser aussi utiliser cette classe<br>
<br>
afin de simuler les commandes clavier<br>
<br>
face="Courier New" size="2"><font color="#0033ff">) ' pour chan</font></font>ger<br>
<br>
face="Courier New" size="2"><font color="#0033ff">) ' pour chan</font></font>ger<br>
<br>
<br>
<br>
Ca m'a permis d'installer une appli en repondant aux questions.<br>
<br>
Et en foxpro j'utilise Wscript.Shell<br>
oShell.SendKeys("{ENTER}{TAB}{TAB}{TAB}{TAB}{UP}{ENTER}{ENTER}{ENTER}")<br>
<br>
Et j'installe mon appli comme cela.<br>
<br>
olivier<br>
<br>
<font face="Courier New" size="2"><font color="#0033ff"><br>
</font></font><br>
<br>
Nicolas B. a &eacute;crit&nbsp;:
<pre wrap="">Je vais essayer de m'en sortir en utilisant &agrave; la fois le StreamReader et
le StreamWriter, mais &ccedil;a va effectivement &ecirc;tre un peu plus compliqu&eacute;...


Bonne soir&eacute;e,

Nicolas

Fred a &eacute;crit :
</pre>
<blockquote type="cite">
Nicolas B. disait :
</pre>
<blockquote type="cite">
<pre wrap="">Re bonjour,

Le code pr&eacute;c&eacute;dent fonctionne bien. Mais finalement, mon probl&egrave;me est
un peu plus compliqu&eacute; : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous &eacute;craser les
fichiers ?") et je dois y r&eacute;pondre ("&gt; oui"). Il faudrait que
j'arrive &agrave; la fois &agrave; r&eacute;cup&eacute;rer dans mon programme les questions que
me pose l'application lanc&eacute;e et r&eacute;pondre &agrave; ces questions, l&agrave; aussi &agrave;
partir de mon programme.

Est-ce faisable ?
</pre>
</blockquote>
<pre wrap="">Oui sans doute, mais je n'ai pas test&eacute;.
Il existe &eacute;galement RedirectStandardInput et le StreamWriter StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
&eacute;ventuellement &eacute;crire une r&eacute;ponse sur le InputStream.
Attention, il faut g&eacute;rer la lecture caract&egrave;re par caract&egrave;re car
lorsque'une question est pos&eacute;e, elle peut l'&ecirc;tre avant le retour &agrave; la
ligne.

</pre>
</blockquote>
</blockquote>
</body>
</html>
Publicité
Poster une réponse
Anonyme