Nur 1 Prozess seines Scripts laufen lassen

  • Also
    es soll von meinem script immer nur 1 prozess laufen,
    dh bei das darf immer nur 1 mal laufen

    [autoit]


    If UBound(ProcessList(@ScriptName)) > 1 Then Exit
    While 1
    Sleep(500)
    WEnd

    [/autoit]


    das funktioniert aber nicht so wie ichs mag :o
    kann mir jemand helfen? habe gegoogelt aber nichts gefunden
    mfg

  • Das ganze würde aber auch mit zatoo's Methode funktionieren.


    [autoit]

    If UBound(ProcessList(@ScriptName)) > 1 Then Exit

    [/autoit]


    Der Denkfehler ist hier, dass das Array nicht größer 1 sein darf. Das ist falsch, es darf nicht größer als 2 sein.

    Grund:

    processlist ist 1 Feld groß, wenn kein Prozess mit dem Namen existiert. Da minstesns ein Prozess mit dem Namen existieren darf, nämlich der eigene muss man prüfen ob neben dem eigenen noch weitere existieren, also eine Arraygräße von mehr als 2.

    $array[0][0] = Anzahl der Prozesse <-- 1. Element
    $array[1][0] = Name des 1. Prozesses <-- 2. Element
    $array[2][0] = Name des 2. Prozesses <-- 3. Element

    2 Mal editiert, zuletzt von misterspeed (4. August 2012 um 13:40)

  • also es ist nicht so wie ihr meint,
    es is so unzwar is ne exe, wenn die läuft soll se nicht nochmal startbar sein (schon starten aber direkt beendet werden)

  • also es ist nicht so wie ihr meint,
    es is so unzwar is ne exe, wenn die läuft soll se nicht nochmal startbar sein (schon starten aber direkt beendet werden)

    Und nun? Haben doch alle hier verstanden, ersetze einfach die 1 in deiner if Bedingung durch 2 oder nutze alternativ die Funktion singleton(). Beides bewirkt genau das was du willst. Dein Fehler ist es lediglich gewesen, dass sich bereits die erste Instanz beendet, weil sie sich selbst schon als eine zuviel ansieht.

  • Zeig am besten mal dein Skript, so ist das ganze momentan mit einiger Rätselei verbunden.
    Du musst im Prinzip nur das Singleton an den Scriptanfang setzen; der Fehler mit dem _IsPressed hat nichts mit dem Singleton zu tun - vermutlich hast du einfach eine neue Funktion namens "_IsPressed" definiert, was zu Problemen führt, wenn du die Misc.au3 includest, da es dort die Funktion auch gibt.

    Gruß stay

  • Das ganze würde aber auch mit zatoo's Methode funktionieren.


    [autoit]

    If UBound(ProcessList(@ScriptName)) > 2 Then Exit

    [/autoit]

    Kann es nicht passieren, dass beide exe-Dateien gleichzeitig checken ob eine Instanz zu viel ausgeführt wird und sich dann sofort beide schliessen?

    _Singleton funktioniert einwandfrei!

  • Jo deswegen gibts singleton ja vermutlich. :)

    Allerdings dürfte es in der Praxis kaum vorkommen, dass der Prozess innerhalb weniger Milisekunden mehrmals gestartet wird. Viel problematischer an der Lösung ist es aber, dass lediglich der Prozessname geprüft wird, welcher durchaus auch von anderen Programmen verwendet werden könnte. Singleton ist jedenfalls die bessere/zuverlässigere Variante.

  • Kann es nicht passieren, dass beide exe-Dateien gleichzeitig checken ob eine Instanz zu viel ausgeführt wird und sich dann sofort beide schliessen?


    Nein, kann es nicht, da das ja vermutlich nur beim Start des Programmes geprüft wird und das 1. Programm wohl in einem fortgeschrittenen Stadium ist, wenn das 2. gestartet wird und deshalb nicht mehr prüft. Trotzdem wird es wohl passieren, dass sich das 2. Programm selbst auch wieder in der Prozessliste findet: die Abfrage müsste deshalb angepasst werden.

    Gruß stay