Schleifen fehler

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von vb2011.

    Schleifen fehler

    Hallo ,

    Ich habe folgendes Problem diese Schleife ordentlich zu Programmieren

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. ' Durchläuft alle markierten Einträge
    3. 'If ListView1.CheckedItems.Text = "Prozess" Then
    4. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    5. ' Hilfsvariable für den Pfad
    6. Dim fullpath As String = ListView1.CheckedItems(index).Text
    7. ' Dateiname ohne Dateiendung (=ProcessName)
    8. Dim processname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    9. If ListView1.CheckedItems.Text = "Prozess" Then
    10. ' Prüfen, ob Process mit dem aktuellen processname schon läuft
    11. If Process.GetProcessesByName(processname).Length <= 0 Then
    12. ' Versuche, Process zu starten
    13. Try
    14. Process.Start(fullpath)
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message)
    17. End Try
    18. End If
    19. End If
    20. Next
    21. 'Else
    22. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    23. ' Hilfsvariable für den Pfad
    24. Dim fullpath As String = ListView1.CheckedItems(index).Text
    25. ' Dateiname ohne Dateiendung (=Dienstname)
    26. Dim dienstname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    27. If ListView1.CheckedItems.Text = "Prozess" Then
    28. ' Prüfen, ob der Dienst mit dem aktuellen dienstnamen schon läuft
    29. If ServiceController.GetServices(dienstname).Length <= 0 Then
    30. ' Versuche, Dienst zu starten, wenn dieser nicht läuft
    31. Try
    32. ServiceController(fullpath).Start
    33. Catch ex As Exception
    34. MessageBox.Show(ex.Message)
    35. End Try
    36. End If
    37. End If
    38. Next
    39. End Sub

    Also die Schleife soll dann erst Starten wenn folgende Parameter True sind
    Pfad + Dienst aus der Listview und checked = Timer legt los
    Pfad + Prozess aus der Listview und checked = Timer legt los

    So sieht mein Programm aus


    Der erste Durchlauf soll den Prozess betreffen Pfad + Typ = Prozess
    Der zweite Durchlauf soll den Dienst betreffen Pfad + Typ = Dienst

    Insbesondere der Untereteil mit dem Dienst starten funktioniert noch nicht

    Kann mir jemand helfen
    Wie wird die Schleife richtig gecodet ?

    Gruß und Dank

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „vb2011“ ()

    Der Code kann so nicht funktionieren weil Du die Prozesse falsch abfragst. GetProcessByName liefert ein Array zurück und keinen String.

    Willst Du die derzeit aktiven Prozesse durchlaufen geht das z.B. so (quick n' dirty ;) :(

    VB.NET-Quellcode

    1. For Each p As Process In Process.GetProcesses
    2. Debug.Print(p.ProcessName)
    3. Next

    Aber Achtung der Prozessname beinhaltet nicht die Extension.

    Gruß

    Rainer

    ErfinderDesRades schrieb:

    ähm - der gezeigte Code - compiliert das überhaupt?
    Nö, da sind 5 satte Fehler bei mir. :thumbdown:
    @vb2011:
    Nimm VB2008 oder VB2010, korrigiere den Code bis er läuft und sieh dann, ob noch Fehler sind.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kanns sein, dass du den Code von irgendwo abkopiert hast, ohne ihn wirklich zu verstehen?
    Und die Fehler stehen doch da. Du hast sc (Wahrscheinlich ein Process-Objekt) nicht deklariert, bzw. den Teil, wo sc deklariert wurde, nicht mitkopiert.
    Und der, der den Code fabriziert hat, hat ein paar Fehler reingebracht, da CheckedItems ein Array bzw. ne ListOf ist, die musst du mit ner Schleife durchgehen.
    Danke Samus Aran
    Bloß wie funktioniert das jetzt meine Schleife mit der Auswahl Dienst
    Den Dienst starten wenn dieser bendet wurde ?

    ??
    Danke aber für deine Hilfe

    PS mit der Else anweisung ich hab da noch zu viele fehler drinn,wäre interresiert an der korregierten schreibweise. Bitte alles kommentieren im Code damit ich das verstehen kann .

    Danke
    @ vb2011

    Fang doch erstmal klein an und teste dann Deinen Code Schritt für Schritt.

    Bau doch erstmal nur eine Schleife die alle Selected-Einträge in der ListBox ausliest und per debug.print ausgibt.

    Dann poste hier den Code und dann helfen wir Dir beim nächsten Schritt.

    Gruß

    Rainer
    @ vb2011

    Es soll Dir das bringen das Du lernst den Code zu verstehen, bzw. selber zu erstellen. Denn der Code oben gibt mit Sicherheit so wie er ist kein SelectedItem als String aus Deiner ListBox zurück (ausser Du hast ihn zwischenzeitlich geändert ;) ).

    Vermutlich kann Dir hier fast jeder den Code so umschreiben das er funktioniert. Die Tips wie es geht hast Du hier schon alle bekommen. Und wenn Du damit nicht weiter kommst, helfe ich Dir (und vermutlich auch die anderen) gerne mit Tips/Hinweisen schrittweise zu Deinem Ziel zu kommen, aber ich persönlich werde Dir Deinen Code nicht einfach mal so umschreiben damit Du ihn nur per Copy und Paste einfügen brauchst. ;)

    Gruß

    Rainer

    vb2011 schrieb:

    Ja deshalb frag ich ja wie man es richtig macht: )

    Weiter komm ich ja nicht ist voll blockiert .

    Gruß Björn


    Okay, hier mal eine kleine Umarbeitung Deiner ersten Schleife ... so sollte es funktionieren. Allerdings ohne Gewähr da ungetestet, habe halt den Code nur mal schnell aus dem Bauch raus umgearbeitet.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim strItemCheck As String
    3. Dim objProcess As System.Diagnostics.Process
    4. Dim blnFound As Boolean
    5. ' Durchläuft alle markierten Einträge
    6. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    7. ' Hilfsvariable für den Pfad
    8. Dim fullpath As String = ListView1.CheckedItems(index).Text
    9. ' Dateiname ohne Dateiendung (=ProcessName)
    10. Dim processname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    11. strItemCheck = ListView1.CheckedItems(index).Text
    12. If String.Compare(strItemCheck, "Prozess", False) = 0 Then
    13. ' Prüfen, ob Process mit dem aktuellen processname schon läuft
    14. For Each objProcess In System.Diagnostics.Process.GetProcesses
    15. blnFound = (String.Compare(strItemCheck, objProcess.ProcessName, False) = 0)
    16. If blnFound Then Exit For
    17. Next objProcess
    18. ' Versuche, Process zu starten
    19. If Not blnFound Then
    20. Try
    21. System.Diagnostics.Process.Start(fullpath)
    22. Catch ex As Exception
    23. ' MessageBox.Show(ex.Message)
    24. End Try
    25. End If
    26. End If
    27. Next index
    28. End Sub


    Probiere mal aus ob diese erste Schleife das macht was Du willst und wenn ja, solltest Du auch gleich die passende Vorlage habe um die zweite Schleife selber schreiben zu können. ;)

    Gruß

    Rainer