web-dev-qa-db-fra.com

Obtenir la sortie d'une commande shell en VB.net

J'ai un programme VB.net dans lequel j'appelle la fonction Shell. Je voudrais obtenir la sortie de texte qui est produite à partir de ce code dans un fichier. Cependant, ce n'est pas la valeur de retour du code exécuté, donc je ne sais pas vraiment comment faire. 

Ce programme est un service mais n’a aucun problème avec le disque car j’ai déjà enregistré d’autres informations. L'ensemble du service comporte plusieurs threads, je dois donc également m'assurer que le fichier, lorsqu'il est écrit, n'est pas déjà utilisé.

16
David Brunelle

Vous ne pourrez pas capturer la sortie de Shell. 

Vous devrez changer cela en un processus et vous devrez capturer les flux Sortie standard (et éventuellement une erreur) du processus.

Voici un exemple:

        Dim oProcess As New Process()
        Dim oStartInfo As New ProcessStartInfo("ApplicationName.exe", "arguments")
        oStartInfo.UseShellExecute = False
        oStartInfo.RedirectStandardOutput = True
        oProcess.StartInfo = oStartInfo
        oProcess.Start()

        Dim sOutput As String
        Using oStreamReader As System.IO.StreamReader = oProcess.StandardOutput
            sOutput = oStreamReader.ReadToEnd()
        End Using
        Console.WriteLine(sOutput)

Pour obtenir l'erreur standard:

'Add this next to standard output redirect
 oStartInfo.RedirectStandardError = True

'Add this below
Using oStreamReader As System.IO.StreamReader = checkOut.StandardError
        sOutput = oStreamReader.ReadToEnd()
End Using
28
competent_tech

Dirigez simplement la sortie vers un fichier texte?

MyCommand > "c:\file.txt"

Ensuite, lisez le fichier.

8
MarkJ
    Dim proc As New Process

    proc.StartInfo.FileName = "C:\ipconfig.bat"   
    proc.StartInfo.UseShellExecute = False
    proc.StartInfo.RedirectStandardOutput = True
    proc.Start()
    proc.WaitForExit()

    Dim output() As String = proc.StandardOutput.ReadToEnd.Split(CChar(vbLf))
    For Each ln As String In output
        RichTextBox1.AppendText(ln & vbNewLine)
        lstScan.Items.Add(ln & vbNewLine)
    Next

=============================================== ====================., créez un fichier de commandes sur deux lignes comme indiqué ci-dessous:

    echo off
    ipconfig

'assurez-vous de sauvegarder ce fichier batch sous le nom ipconfig.bat ou quel que soit le nom que vous décidez de choisir, mais assurez-vous de mettre le point bat à la fin. 

0
Scotty Stultz