Prüfen, ob Anwendung gestartet wurde und danach beenden

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    @Murdersquad Kannst Du nicht in der SPS ein weiteres Programm laufen lassen, mit dem Du kommunizierst?
    Mein letzter Kenntnisstand war der, dass auf einer SPS ein Win7 laufen kann. Ist das bei Dir so?
    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!
    Nein, das geht nicht. Ich habe einen richtigen SPS-Prozessor vor mir, keine Soft-SPS.
    Leider kann auch kein weiteres Programm ablaufen.

    Ich hatte noch eine Lösungsmöglichkeit.
    Der SPS-Zyklus beträgt nur ein paar Millisekunden, trotzdem kommt es ja hin und wieder zu der Überschneidung.

    Es wäre dann theoretisch möglich, dass man das Bit für z.B. 3s auf True setzt und dann wieder auf False.
    Problem ist halt dabei wirklich, dass das Sub bei mir immer wieder durchlaufen wird.
    @Murdersquad Dann musst Du mal den Ablauf analysieren und ein Flag setzen, dass die Aktion nur ein Mal ausgeführt wird.
    Wo kommt denn der multiple Aufruf her? Von einer Timer-Prozedur? Dann beende den Timer in der Tick-Prozedur.
    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!
    Mein Gefühl sagte mir gestern noch, dass ich die Abfrage mit in den Timer packen sollte und damit geht es :D

    Ich danke dir auf jeden Fall für die Hilfe und vor allem für die Zeit. Es ist schön und gut, dass es solche Foren gibt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public closed As Boolean = False
    2. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    3. Dim p() As Process
    4. Dim prog As String = lines(8)
    5. Dim argumente As String = "-open " & Chr(34) & lines(14) & Chr(34)
    6. Dim null() As Byte = BitConverter.GetBytes(0)
    7. Dim eins() As Byte = BitConverter.GetBytes(1)
    8. p = Process.GetProcessesByName(prog)
    9. If DB30_DBX01 And p.Count = 0 Then
    10. prc = New Process
    11. prc.StartInfo.FileName = lines(11)
    12. If Not lines(14) = "" Then
    13. prc.StartInfo.Arguments = argumente
    14. End If
    15. prc.EnableRaisingEvents = True
    16. prc.Start()
    17. Dim wrDB30_DBB1() As Byte = BitConverter.GetBytes(1)
    18. Client.DBWrite(System.Convert.ToInt32(TxtDBNr.Text), 1, 1, wrDB30_DBB1)
    19. End If
    20. If closed = True Then
    21. Client.DBWrite(System.Convert.ToInt32(TxtDBNr.Text), 3, 1, eins)
    22. closed = False
    23. End If
    24. End Sub
    25. Private Sub prc_exit(sender As Object, e As EventArgs) Handles prc.Exited
    26. closed = True
    27. End Sub

    quote='Murdersquad','https://www.vb-paradise.de/index.php/Thread/130089-Prüfen-ob-Anwendung-gestartet-wurde-und-danach-beenden/?postID=1125139#post1125139']

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(...) ...
    2. Dim p() As Process
    3. ' ...
    4. p = Process.GetProcessesByName(prog)
    [/quote]Den Prozess holst Du Dir genau ein Mal, es ist immer derselbe!!!
    Also nicht im Timer-Tick, sondern da, wo Du ihn startest.
    Möglicherweise greifst Du auf eine falsche Prozess-Instanz zu.
    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!