Prozessproblem

  • Hallo,
    ich habe bereits 4 aktive User hier im Forum gefragt ob sie mir bei der Lösung des Problems helfen könnten,
    keiner wusste eine lösung (auf den ersten oder zweiten blick)

    unzwar,
    habe ich eine schleife, die soll WENN ein Prozess (in meinem Fall
    Notepad.exe) NICHT läuft, die Notepad.exe (die neben mein Script liegt)
    starten.

    Mir wurde empfohlen ShellExecute zu nehmen, mit dem tritt das gleiche Problem auf

    es
    öffnet sich also die exe Mehrfach, so oft bis die CPU Auslastung auf
    100% ansteigt und ich den Rechner neustarten muss weil es zu heftig
    laggt

    [autoit]


    $SECONDPROCESS = "Notepad.exe"
    $SECONDFILE = "Notepad.exe"

    [/autoit][autoit][/autoit][autoit]

    While 1
    If Not ProcessExists($SECONDPROCESS) Then
    Run($SECONDFILE) ;/Shellexecute($SECONDFILE)
    EndIf
    ;Sleep(1000) ;ohne wie mit alles kacke
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Zattoo (13. April 2012 um 23:26)

  • nimm lieber

    [autoit]

    RunWait

    [/autoit]


    Und bau ein Sleep in der schleife ein^^

    [autoit]

    $SECONDPROCESS = "Notepad.exe"
    $SECONDFILE = "Notepad.exe"

    [/autoit][autoit][/autoit][autoit]

    While Sleep(100) ;Sleep sons verbraucht die exe selbs sehr viel CPU auslastung
    If Not ProcessExists($SECONDPROCESS) Then
    RunWait(@Scriptdir&"\"&$SECONDFILE) ; wenn die exe die neben dein script gestartet werden soll @ScriptDir verwenden
    EndIf
    WEnd

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

    Einmal editiert, zuletzt von xXxProGamerxXx (12. April 2012 um 13:20)

  • die Notepad.exe muss doch gar nicht im Ordner sein, bei mir reicht es z.B. run("Notepad.exe") :thumbup:

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • Bei mir und jeder andere Windows User auch, aber ist ja möglich das ein anderes Programm gemeint ist

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • BOA KOTZT DAS AN

    ich hab ne exe die heißt jetzt einfach ma genannt taskmanager.exe mit dem inhalt:

    [autoit]


    While 1
    If Not ProcessExists("Notepad.exe") Then
    ShellExecuteWait("Notepad.exe", "", "", "", @SW_HIDE)
    EndIf
    WEnd

    [/autoit]

    dann startet sich tausend mal die exe taskmanager.exe, die eigentlich notepad.exe aufhalten soll :/

  • Hallo Zattoo (oder besser Jägermeister?),

    das du das gleiche Thema mit dem gleichen Inhalt (Copy und Paste) 2 Min.voher auf dem"bösen" Forum gestellt hast zeigt mir dass du nicht gewillt bist dir selbst Lösungen zu erarbeiten (selbst der Beutrag von 16:31 ist Copy & Paste deines Beutrags dort von 16:14), zumal das Skript einwandfrei funktioniert. Du solltest dein komplettes Skript posten denn ich vermute dass der (logische) Fehler an einer anderen Stelle liegt. Btw, welches BS verwendest du?. Funktioniert den das Skrupt aus der Hilfe zu ProcessExists=

    [autoit]

    If ProcessExists("notepad.exe") Then
    MsgBox(0, "Beispiel", "Der Editor läuft.")
    EndIf

    [/autoit]

    aus oben genannten Gründen bitte nicht mehr supporten bis der TE sein Skript eingestell hat,
    mfg autoBert

    Einmal editiert, zuletzt von autoBert (12. April 2012 um 17:36)

  • Erstens, hab ich weder Skype noch ICQ. :whistling:
    Hab ich noch nie viel Sinn drinn gesehen...
    Und zweitens, was heißt mit deinen Dateien? Es existiert doch nur eine Datei, und die sollte so aussehen:

    [autoit]

    While 1
    If Not ProcessExists("Notepad.exe") Then ShellExecuteWait("Notepad.exe", "", "", "")
    WEnd

    [/autoit]


    (Du brauchst ja keinen Mehrzeiligen If-Bereich, ist ja nur ein Befehl.)
    Mehr brauchst du ja nicht...
    Führe einfach mal das angehängte Script aus, ohne jegliche Änderungen.
    Behalte am besten auch erstmal Notepad.exe bei.

    lg chess

  • autobert, ich versteh den sinn nicht von deinem post,
    sobald ich in einem 2. Forum nach support frage, (weil dort sicherlich noch andere user sind als hier) stellst du gleich meine mitarbeit in frage?
    ziemlich komisch :/

    das funktioniert einwandfrei :/
    ich melde mich morgen nochmal und schaue was bei mir jetzt falsch war und poste es dann hier :)
    dankeschöön :)

  • autobert, ich versteh den sinn nicht von deinem post,sobald ich in einem 2. Forum nach support frage, (weil dort sicherlich noch andere user sind als hier) stellst du gleich meine mitarbeit in frage?ziemlich komisch :/das funktioniert einwandfrei :/ich melde mich morgen nochmal und schaue was bei mir jetzt falsch war und poste es dann hier :)dankeschöön :)

    Dus sollst dein Skript einstellen, denn alle sind sich sicher dass dein Codeschnipsel funktioniert. Dein Verhalten ist aber typisch für Benutzer die nicht ganz Forenregel konforme Wünsche/Vorstellungen haben und ohne eigenes Zutun möglichst schnell zu einem funktionierendem Skript zu kommen oder wie Andy sagen würde: du suchst jemanden der dir deinen Arm aus der Sonne legt.
    Im übrigen bin ich mir sicher dass Seubo sollte er dein Thema hier lesen das identische dort wegen "Resourcenverschendung" schliesst und in meinen Augen hat er Recht bevor du die 2 identische Themen aufgemacht hast hast du im Forum (also in jedem) bereits 4 Leute befragt *2=8. Verschiedene Hinweise überliest du einfach ohne die Fragen zu beantworten, Damit verschwendest du deine und vor allem die Zeit der Hilfewilligen.
    Bei deinem nächsten Post erwarte ich dass du die Konsolenausgabe von Scite zu folgendem Programm einstellst:

    [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)

    [/autoit][autoit][/autoit][autoit]

    Local $i, $iStart = TimerInit()
    Do
    If Not ProcessExists("Notepad.exe") Then
    ShellExecute("Notepad.exe")
    ConsoleWrite($i & " NOTEPAD wurde gestartet" & @CRLF)
    Else
    ConsoleWrite($i & " NOTEPAD war bereits gestartet" & @CRLF)
    EndIf
    $handle = WinGetHandle("classname=Notepad")
    $i += 1
    WinActivate($handle)
    Sleep(100) ; damit dein Prozessor nicht abkotzt
    $iDiff = TimerDiff($iStart)
    Until $iDiff > 15000

    [/autoit]

    und die Fragen beantwortest welches Betriebsystem benutzt du? Für welche Hardwararchitektur hast du kompiliert ? Hast du einen 32 oder 64-Bit Prozessor (@CPUArch), die Antworten darauf geben eine mögliche Erklärung für dein Problem und ohne Antwort(en) sehe ich ein 20 Seiten Thema das am Schluss ungelöst bleibt (und das u.U. gleich 2 mal)

    gilt immer noch: bitte nicht mehr supporten bis der TE sein Skript eingestell hat,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (12. April 2012 um 19:28)

  • BS: Win7 Ultimate x64
    Compiled: x32
    Prozessor: x64

    1. Datei

    Spoiler anzeigen
    [autoit]

    Global $ENDNAME = "Notepad.exe"
    Global $ORDNER = @ScriptDir & "/"
    Global $FIRSTPROCESS = $ENDNAME
    Global $FIRSTFILE = $ORDNER & $ENDNAME
    Global $SECONDPROCESS = "Test.exe"
    Global $SECONDFILE = $ORDNER & $SECONDPROCESS
    Global $THIRDPROCESS = "Test2.exe"
    Global $THIRDFILE = $ORDNER & $SECONDPROCESS

    [/autoit] [autoit][/autoit] [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)

    [/autoit] [autoit][/autoit] [autoit]

    Local $i, $iStart = TimerInit()
    Do
    If Not ProcessExists($SECONDPROCESS) Then
    ShellExecute($SECONDFILE)
    ConsoleWrite($i & " NOTEPAD wurde gestartet" & @CRLF)
    Else
    ConsoleWrite($i & " NOTEPAD war bereits gestartet" & @CRLF)
    EndIf
    $i += 1
    Sleep(100)
    $iDiff = TimerDiff($iStart)
    Until $iDiff > 15000

    [/autoit]

    2. Datei

    Spoiler anzeigen
    [autoit]

    Global $ENDNAME = "Notepad.exe"

    [/autoit] [autoit][/autoit] [autoit]

    Global $ORDNER = @ScriptDir & "/"

    [/autoit] [autoit][/autoit] [autoit]

    Global $FIRSTPROCESS = $ENDNAME

    [/autoit] [autoit][/autoit] [autoit]

    Global $FIRSTFILE = $ORDNER & $ENDNAME

    [/autoit] [autoit][/autoit] [autoit]

    Global $SECONDPROCESS = "Test.exe"

    [/autoit] [autoit][/autoit] [autoit]

    Global $SECONDFILE = $ORDNER & $SECONDPROCESS

    [/autoit] [autoit][/autoit] [autoit]

    Global $THIRDPROCESS = "Test2.exe"

    [/autoit] [autoit][/autoit] [autoit]

    Global $THIRDFILE = $ORDNER & $SECONDPROCESS

    [/autoit] [autoit][/autoit] [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)

    [/autoit] [autoit][/autoit] [autoit]

    Local $i, $iStart = TimerInit()
    Do
    If Not ProcessExists($FIRSTPROCESS) Then
    ShellExecute($FIRSTFILE)
    ConsoleWrite($i & " NOTEPAD wurde gestartet" & @CRLF)
    Else
    ConsoleWrite($i & " NOTEPAD war bereits gestartet" & @CRLF)
    EndIf
    If Not ProcessExists($THIRDPROCESS) Then
    ShellExecute($THIRDFILE)
    ConsoleWrite($i & " NOTEPAD wurde gestartet" & @CRLF)
    Else
    ConsoleWrite($i & " NOTEPAD war bereits gestartet" & @CRLF)
    EndIf
    $i += 1
    Sleep(100)
    $iDiff = TimerDiff($iStart)
    Until $iDiff > 15000

    [/autoit]

    also mit deinem script gehts, jetzt wo es 2 Dateien gibt die überprüfen geht es wieder nicht :/
    (CPU: 100% ausgelastet)

  • Hi,

    Zitat von autoBert

    ....Andy sagen würde: du suchst jemanden der dir deinen Arm aus der Sonne legt.

    hehe, genau...und (nicht nur) aus diesem Grunde, sondern weil ich auch zu 100% sicher bin, dass wieder mal irgendeine Gülle verzapft werden soll....vote for close, denn das "Problem" ist Scripttechnisch gelöst!