Announcement

Collapse
No announcement yet.

Externe Programme VB.Net starten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Externe Programme VB.Net starten

    HI ,
    wie kann ich unter VB .Net externe Programme starten und mir das Ergebnis
    z.B in einer Text Box anzeigen lassen.
    Es dafür eine Funktion Shell die dies tun soll.
    Beispiel :
    Shell("""C:\Windows\System32\ping""-a Rechnername"">c:\ping.txt", , True, 100000.
    Die Ausgabe der DOSBOX möchte ich irgendwie auslesen.
    Ich habe versuchte das Ergebnis der DosBox in eine Datei um zuleiten.
    Dies Funktioniert aber nicht.
    Wer hat eine Idee ?

  • #2
    Hallo,

    dafür ist die Klasse <b>Process</b> zuständig, die u.a. auch die Eigenschaft <b>StandardOutput</b> bereitstellt. Ein Beispiel für das Auslesen der Informationen ist auf der Hilfeseite zu StandardOutput zu finden.

    Das folgende Beispiel demonstriert nur, wie das Windows-Zubehör Taschenrechner gestartet wird und das eigene .NET-Programm auf dessen Ende wartet:
    <pre>
    Imports System.Diagnostics
    ...

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim p As New Process()
    p.StartInfo.FileName = "calc.exe"
    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal
    p.Start()
    p.WaitForExit()
    p.Close()
    MessageBox.Show("Programm wurde geschlossen")
    End Sub
    </pre&gt

    Comment


    • #3
      Hallo Andreas,
      danke für deinen Tip. Dass funktioniert soweit ganz gut.
      Wenn ich aber einen Parameter mit an die Dateianhänge läuft das Programm nicht mehr.
      Beispiel : p.StartInfo.FileName = """C:\Windows\system32\ping.exe""-a Rechnername"
      Hst du eine Idee was der Fehler ist ?
      &#10

      Comment


      • #4
        Hallo,

        das Betriebssystem unterscheidet penibel zwischen der Zeichenkette für das ausführbare Programm und den Argumente (Aufrufparametern) für diese Anwendung. Das folgende Beispiel demonstriert, wie der Output des PING-Aufruf des eigenen Rechners ("localhost") umgeleitet und in einer String-Variable abgelegt werden kann:
        <pre>
        Dim p As New Process()
        p.StartInfo.FileName = "ping.exe"
        p.StartInfo.Arguments = "localhost"
        p.StartInfo.UseShellExecute = False
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.CreateNoWindow = True
        Dim sOutput As String
        p.Start()
        sOutput = p.StandardOutput.ReadToEnd()
        p.WaitForExit()
        p.Close()
        MessageBox.Show(sOutput)
        </pre>
        Der Namespace muss via <b>Imports System.Diagnostics</b> eingebunden werden

        Comment


        • #5
          Hallo Andreas,<br>
          funktioniert diese Methode auch, wenn das Programm unter anderen Benutzer ausgeführt werden soll? Hintergrund ist der, dass mein Programm sonst unter Admin-Rechten läuft und der Benutzer daher mehr Systemrechte erhalten würde, als mir lieb ist.

          Danke,<br>Jör

          Comment


          • #6
            Hallo,

            &gt;..dass mein Programm sonst unter Admin-Rechten läuft ..

            das spielt in .NET keine Rolle mehr, da die Anwendung selbst die Rechte beschränken kann. Während früher das Benutzerkonto die Rechte der gestarteten Prozesse festgelegt hat, stellt .NET eine sehr viel feinere Abstufung zur Verfügung. Das folgende Beispiel verweigert sogar dem Administrator den Zugriff auf eine Datei.
            <pre>
            Imports System.Security.Permissions
            ...
            Dim aFP As New FileIOPermission(PermissionState.None)
            aFP.AddPathList(FileIOPermissionAccess.Write Or FileIOPermissionAccess.Read, "C:\Test.txt")
            aFP.Deny()
            </pre>
            Man kann auch einem Programm zur Sicherheit alle Rechte nehmen und jede benötigte Ressource (Datei, Registry etc.) einzeln wieder über den Aufruf der Demand-Methode erlauben

            Comment

            Working...
            X