Prozess nur einmal starten!

  • Guten Morgen,
    ich hoffe ich habe nur ein relativ simples anliegen, aber ich komme momentan nicht weiter.

    Problem:
    Ich versuche einen Prozess nur einmal zu starten und anschließend soll überprüft werden, ob der prozess nur einmal gestartet iworden ist. Außerdem soll die Möglichkeit, den Prozess ein zweites Mal zu starten, blockiert werden.

    [autoit]


    Run("notepad.exe")
    while 1
    if ProcessExists("notepad.exe") Then
    ?? not run("notepad.exe")??
    EndIf
    WEnd

    [/autoit]

    Ich will also nur eine Instanz von dem Programm ausgeführt haben.

    2 Mal editiert, zuletzt von KriZza (21. Oktober 2009 um 12:36)

  • Ich versteh nicht ganz, soll der 2 Prozess von Autoit oder von was anderem, also zum Beispiel wenn ich auf ein Startbutton am Destop klicke, nicht gestartet werden?

  • Der Prozess soll generell nicht zwei Mal gestartet werden. Über das AutoIT - Script nicht und per Dateiebene mit einem normalem "Doppelklick" auf die .exe auch nicht. Der zweite Punkt ist aber auch nicht so wichtig, den die .exe kann in der Ordnerstruktur ja soweit versteckt werden, dass 0815 - User den nicht finden können, so könnte man sicherlich Ressoucen sparen.
    Also Hauptaugenmerk liegt erstmal darauf, dass ein Prozess nicht zwei Mal über das AutoIT -Script gestartet werden kann.

  • Sooo, jetzt aber

    Probier mal ob das deinen vorstellungen entspricht.. weiß nicht ob es die geschickteste lösung ist, aber es funktioniert:

    [autoit]


    #include <Array.au3>
    If ProcessExists("Notepad.exe") Then ProcessClose("notepad.exe") ; Wenn Notepad schon existiert, wird es geschlossen ( bevor irgendwas anderes gemacht wird )
    Run("Notepad.exe") ; Nun wird "Dein" Notepad gestartet
    while 1
    If ProcessExists("notepad.exe") Then ;Sollte "notepad.exe" vorhanden sein,
    $Liste = ProcessList("notepad.exe") ; Erstelle eine liste mit allen prozessen, die "notepad.exe" heißen
    ;~ _ArrayDisplay($Liste) ; Zeige diese Liste an (nur damit du siehst wie sie aussieht)
    If $Liste[0][0] > 1 Then ; Falls der wert in der ersten Zeile/erste spalte ( der gibt die anzahl der gestarteten Notepad prozesse an) größer als 1 ist,
    Local $i
    For $i = 2 to Ubound($Liste)-1
    ProcessClose($Liste[$i][1]) ; Schließe während einer schleife alle Notepad prozesse ausser deinen eigenen.
    Next
    EndIf
    EndIf
    sleep(1)
    WEnd

    [/autoit]