Shellexecute kann Grafikdatei wegen fehlendem Programm nicht starten

  • Hi alle zusammen,

    ich versuche mit folgendem Code eine Grafikdatei zu öffnen:

    Code
    $sShellvar = ShellExecute($Logfile) ; Logfile ist ein zuvor erzeugter Screenshot!

    Unter Windows 10 alles gut.

    Wenn ich nun mein Programm unter WinPE laufen lasse, wird der Screenshot erzeugt. ShellExecute wirft dann aber(natürlich) eine Fehlermeldung aus, dass es kein
    assoziiertes Programm gibt und die Datei nicht zu öffnen ist. Das Problem: Ich bestätige die Windows-Fehlermeldung, diese verschwindet und mein Proggi macht nicht mehr weiter,
    bzw. es wartet auf i-was, denn nach ca. 30 min macht es plötzlich weiter. Gibt es eine Möglichkeit z.B. den Shellexecute-Prozess zu killen, wenn $sShellvar auf 0 gesetzt wird?

  • Schau mal in die Hilfe: https://www.autoitscript.com/a…unctions/ShellExecute.htm

    Dort findest du worauf du nach Shellexecute prüfen musst (error handling).


    Besser wäre es jedoch deinen Fehler zu korrigieren anstatt ihn zu umschiffen.

    Z.B. ein Festes Programm anzugeben mit dem die Datei geöffnet werden soll (ob es das überhaupt gibt kannst du dann vorher auch prüfen) und dann wie es normalerweise ist, das Bild als Parameter mit zu geben.


    Wie wäre es mit mehr (oder dem ganzen) Code und mehr Infos? Was für eine Grafikdatei soll mit welchem Programm geöffnet werden? Wie wird der Screenshot erzeugt und wo wird er abgelegt?

  • Hallo Mombas,

    in der Hilfe von Shellexecute steht ja nur der Rückgabewert, nicht aber wie man die Shellexecute API selbst stoppen kann wenn sie auf Fehler läuft. In unserer WinPE-Umgebung gibt es kein Programm mit dem
    man den erzeugten Screenshot(*.png-File im selben Verzeichnis wie das Autoit-Proggi) öffnen könnte. Im Übrigen lässt Shellexecute nicht-ausführbare Dateien mit dem dazu assoziierten Programm öffnen, dass es unter WINPE aber eben nicht gibt und auch nicht geben wird(gem unserem zuständigen Admin!).

    Sollte es also kein Errorhandling geben, dass den "Shellexecute-Prozess" selbst stoppen kann, werde ich mein Proggi daraufhin ändern, dass es die OS-Umgebung abfragt und dann Shellexecute an dieser Stelle nicht ausführt.

    Danke trotzdem für die Hilfe.

  • Warum rufst du nicht einfach das Standard Programm auf (Windows Bildanzeige o.ä.) und gibst den Parameter mit?

    Dann weißt du was du killen musst.

    Bei einem Rückgabewert von "0" oder @error <> 0 weißt du das der Aufruf nicht erfolgreich war. (Error Handling)


    Das über die OS-Erkennung zu machen geht aber im Zweifel natürlich auch und scheint in diesem Fall die bessere Wahl zu sein (kenne mich mit WinPE nicht aus).

  • In unserer WinPE-Umgebung gibt es kein Programm mit dem
    man den erzeugten Screenshot(*.png-File im selben Verzeichnis wie das Autoit-Proggi) öffnen könnte. Im Übrigen lässt Shellexecute nicht-ausführbare Dateien mit dem dazu assoziierten Programm öffnen, dass es unter WINPE aber eben nicht gibt und auch nicht geben wird(gem unserem zuständigen Admin!).

    Wenn das AutoIt-Script laufen darf, warum zeigst Du den Screenshot nicht damit an?


    Edit:

    Hier mal ein Beispiel:

  • Hallo Oscar,

    verzeihe bitte das späte Feedback und vielen lieben Dank für die großartige Idee. Diese (naheliegendste)Möglichkeit
    hatte ich gar nicht auf dem Schirm. Ich werde das demnächst testen und hier eine Antwort einstellen.

    Das Wochenende fängt damit ja schon richtig super an. :part: :theke: :party: