OutputDataReceive für CMD (Pfad fehlt)

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von TheBlackSnitter.

    OutputDataReceive für CMD (Pfad fehlt)

    Hay VB-Paradise Team,

    ich hab lange nichts mehr verfasst und melde mich nun zurück aus dem Nirvana ^^

    Ich möchte etwas erstellen um über ADB ein Backup von Androidapps zu erstellen. Ich habe mir überlegt dass es für mich am einfachsten wäre wenn ich eine CMD öffne und diese im Hintergrund benutze. Ich verwende jetzt OutputDataReceive und es funktioniert eigentlich alles recht gut. Was mich etwas stört ist, dass ich nur den wirklichen Output-Text des Befehls zurück bekomme und nicht den Pfad der standartmäßig am Ende des Befehls angefügt wird.


    VB.NET-Quellcode

    1. Public Class Form_Main
    2. Dim ListviewTrigger As Boolean = False
    3. Private WithEvents MyProcess As Process
    4. Private Delegate Sub AppendOutputTextDelegate(ByVal text As String)
    5. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    6. Me.AcceptButton = Button_Execute
    7. MyProcess = New Process
    8. With MyProcess.StartInfo
    9. .FileName = "CMD.EXE"
    10. .UseShellExecute = False
    11. .CreateNoWindow = True
    12. .RedirectStandardInput = True
    13. .RedirectStandardOutput = True
    14. .RedirectStandardError = True
    15. End With
    16. MyProcess.Start()
    17. MyProcess.BeginErrorReadLine()
    18. MyProcess.BeginOutputReadLine()
    19. AppendOutputText("Process Started at: " & MyProcess.StartTime.ToString)
    20. gettext()
    21. End Sub
    22. Sub gettext()
    23. End Sub
    24. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    25. MyProcess.StandardInput.WriteLine("EXIT") 'send an EXIT command to the Command Prompt
    26. MyProcess.StandardInput.Flush()
    27. MyProcess.Close()
    28. End Sub
    29. Private Sub MyProcess_ErrorDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles MyProcess.ErrorDataReceived
    30. AppendOutputText(vbCrLf & "X " & e.Data)
    31. End Sub
    32. Private Sub MyProcess_OutputDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles MyProcess.OutputDataReceived
    33. AppendOutputText(vbCrLf & e.Data)
    34. End Sub
    35. Private Sub ExecuteButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Execute.Click
    36. MyProcess.StandardInput.WriteLine(TextBox_Input.Text)
    37. MyProcess.StandardInput.Flush()
    38. If TextBox_Input.Text.Contains("adb -d shell pm list packages") Then
    39. ListviewTrigger = True
    40. RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "Listviwetrigger: " & ListviewTrigger.ToString
    41. End If
    42. TextBox_Input.Text = ""
    43. End Sub
    44. Private Sub AppendOutputText(ByVal text As String)
    45. If TextBox_Output.InvokeRequired Then
    46. Dim myDelegate As New AppendOutputTextDelegate(AddressOf AppendOutputText)
    47. Try
    48. Me.Invoke(myDelegate, text)
    49. Catch
    50. End Try
    51. Else
    52. If text IsNot vbNewLine Then
    53. TextBox_Output.AppendText(text)
    54. End If
    55. If ListviewTrigger = True Then
    56. ' Dim lines() As String = text.Split(vbCrLf) 'trennt deinen String zwischen Zeilenumbrüchen
    57. 'For Each str As String In lines
    58. ' For i As Integer = 0 To listBox1.Items.Count - 1
    59. ' If str = listBox1.Items(i) Then
    60. ' MsgBox("Eine Zeile kommt auch in der Listbox vor")
    61. 'End If
    62. ' Next
    63. If text.Contains("package:com") Then
    64. ListView_Apps.Items.Add(text.Replace("package:com.", ""))
    65. End If
    66. ' Next
    67. End If
    68. End If
    69. End Sub
    70. Private Sub OutputTextBox_TextChanged(sender As Object, e As EventArgs) Handles TextBox_Output.TextChanged
    71. TextBox_Output.SelectionStart = TextBox_Output.Text.Length
    72. TextBox_Output.ScrollToCaret()
    73. End Sub
    74. End Class


    Das dumme ist, ich weiss einfach nicht wie ich googeln soll weil ich nicht weiss wie diese Zeile genannt wird.
    Ich habe es mit OutputDataReceive CMD Path (usw.) probiert. Leider kein Erfolg.

    Ich hoffe mir kann jemand helfen.

    Mfg TBS
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TheBlackSnitter“ ()

    Es ist nicht nur ein Präfix, wenn ich eine Batch mit einer Abfrage habe läd er auch nicht den kompletten input :/
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.