Gå til innhold

Lese fra og skrive til kommandolinje-program (typisk cmd)


Anbefalte innlegg

På grunn av omstendigheter utenfor min kontroll må jeg lage en "kontroll-applikasjon" av et program som kun kan la seg kompilere som et kommandolinjeverktøy (C# spotlib for dem som er interessert). Og jeg fant denne artikkelen: http://www.devx.com/...ticle/7914/1954 og den forklarer greit nok hva jeg trenger.

 

Men jeg trenger litt mer. Jeg må kunne skrive flere kommandoer i rekkefølge og lese ut flere ganger uten å måtte lukke programmet.

 

 

Jeg har kommet så langt:

    Dim p As Process
   Dim sIn As IO.StreamWriter
   Dim sOut As IO.StreamReader
   Dim sErr As IO.StreamReader

   Private Sub Connection_Open()
       p = New Process()
       p.StartInfo.FileName = "cmd.exe"
       p.StartInfo.UseShellExecute = False
       p.StartInfo.CreateNoWindow = True
       p.StartInfo.RedirectStandardInput = True
       p.StartInfo.RedirectStandardOutput = True
       p.StartInfo.RedirectStandardError = True
       p.Start()

       sIn = p.StandardInput
       sIn.AutoFlush = True

       sOut = p.StandardOutput
       sErr = p.StandardError
   End Sub

   Private Sub Connection_Close()
       If Not p.HasExited Then
           p.Kill()
       End If

       sIn.Close()
       sOut.Close()
       sErr.Close()
       p.Close()
       p = Nothing
   End Sub

   Private Function ExecuteCommand(ByVal cmd As String) As String
       Dim ret As String = String.Empty

       sIn.Write(cmd & System.Environment.NewLine)

       While sOut.Peek > -1
           Dim line As String = sOut.ReadLine & ControlChars.NewLine
           Debug.WriteLine(line)
           ret &= line
       End While

       Return ret
   End Function

 

 

Jeg prøvde med sOut.ReadToEnd men den slutter aldri å lese...

 

Jeg får bare lest ut fra toppen hver gang, og jeg vet heller ikke når jeg kan slutte å lese. Er det noen som har et godt tips?

Endret av Moskus
Lenke til kommentar
Videoannonse
Annonse

Bruk ReadAsyncLine (eller hva den heter) istedet.

Edit: siden du ikke har noen direkte kontroll over hvordan programmet oppfører seg, er dette egentlig eneste fornuftige måten å gjøre det på.

ReadToEnd leser helt til programmet er ferdig med å kjøre, som funker fint for net.exe eller lignende, men fullstendig uegnet for programmer som kjører over lengre tid.

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...