Run() geht nicht mehr o.o

  • Hey,

    seit gestern geht der Befehl Run() einfach nicht mehr. Ich habe nicht einmal was verändert am Script
    und zuvor ging auch alles. Soweit ich mich erinnern kann, gab es auch kein Windows Update o.Ä.

    Ich habe daraufhin ein Beispiel Script gemacht, weil das ursprüngliche Script etwas zu lang wäre
    und nicht gerade zu schnellen Testzwecken geeignet ist. :D

    Im Pfad kommen 2x Leerzeichen vor. Einmal im Usernamen und einmal im Ordner, wo sich w.txt und
    die Autoit Datei befindet. "C:\Users\dev acc\Desktop\run test"

    Als Error bekomme ich 1 heraus. Die Pid, wenn ich sie abfrage, ist immer 0.


    Zitat

    Paths with spaces need to be enclosed in quotation marks.

    Das habe ich auch schon gemacht (wie im Script zu sehen). Ohne oder mit Anführungszeichen, nichts geht. :/
    Habt ihr vielleicht auch solche Probleme oder wisst ihr, wie man das behebt?

    Wenn ich Run("notepad.exe") ausführe, funktioniert jedoch alles.


  • Hey Xorianator,

    ShellExecute() geht zwar, aber wenn ich eine Datei mit unbekannter Endung starte,
    z.B datei.xyz, dann will Windows, dass man ein Progrmam auswählt, mit der
    man Dateien mit dieser Endung starten soll. :( Und im Hauptscript starte ich quasi
    so eine Datei.

  • Eine Datei mit unbekannter Endung starten.

    Bei Shellexecute("Datei") oder einer anderen unbekannten Endung
    funktioniert das ja leider nicht. :(

    Bei Run("Datei") ging das aber immer bis jetzt.

  • Heii Lottich,

    ich habe es unter "C:\Testordner" probiert, aber das ging auch nicht. :o
    Das mit der Datei meine ich so, die Datei hat keine bekannte Endung,
    wie .exe. Und wenn ich die Dateiendung nicht in der registry drin habe,
    fragt Windows bei Nutzung von ShellExecute(), womit die Datei geöffnet
    werden soll. Ist bei Run() sonst nicht so gewesen, weswegen ich es genutzt habe.

    Hier ein kleines Beispiel was ich meine: https://www.youtube.com/watch?v=HmN-knZmC3s


    Edit: Ein Kollege hat den Code auch mal auf seinem PC getestet und da ging es ebenfalls nicht. :(

    Einmal editiert, zuletzt von xSunLighTx3 (3. August 2016 um 22:21)

  • Eine Datei mit unbekannter Endung starten.

    Bei Shellexecute("Datei") oder einer anderen unbekannten Endung
    funktioniert das ja leider nicht.

    Bei Run("Datei") ging das aber immer bis jetzt.D

    Die in Win ehemals integrierte Glaskugel ist seit kurzem in Rente!

    Daher must du das Programm selbst bennenen mit dem die Datei geöffnet werden soll.

  • Wenn du die Datei mit ShellExecute öffnen kannst mach's so:
    ShellExecute("PfadZumProgramm", "PfadZurDatei")

  • Die Umgebungsvariable %PATHEXT% gibt Auskunft darüber, ob eine Datei ausgeführt werden kann. Wird die Dateiendung ".xyz" hier nicht aufgeführt, kann die Datei nicht ausgeführt werden - was bei unbekannten Dateiendungen ja immer der Fall ist!

    Bash
    :~# echo %PATHEXT%
    .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

    Local $pid = Run('"' & @ScriptDir & '\w.txt"')


    Schickst du diesen "Befehl" direkt in der Eingabeaufforderung ab, wird die Datei "w.txt" im Texteditor geöffnet.

    Gleiches Verhalten kannst du in AutoIt so reproduzieren...

    AutoIt
    Local $pid = Run(@ComSpec & ' /c "' & @ScriptDir & '\w.txt"')


    Die Run() Funktion in AutoIt liefert uns jedoch lediglich einen Fehlercode, was vermuten lässt, dass vorab überprüft wird, ob die Dateiendung ".txt" in der Variable %PATHEXT% enthalten ist - sprich: welche(s|r) Programm/Interpreter damit gefüttert werden soll.

    Allerdings ist es für meine Begriffe nicht sonderlich klug, Dateien mit unbekannten Dateiendungen ausführen zu wollen... denn das kann u.U. sehr böse enden!

    Ich habe dir aber dennoch ein kleines Script gebastelt, mit dem dies möglich ist...

    Run_Unknown_Ext.au3

    Einmal editiert, zuletzt von Bitnugger (5. August 2016 um 16:01)

  • Hey Bitnugger,

    awesome script, viel Dank dafür und die verbundene Mühe. :love:
    Wenn ich eine .exe in .xyz umbenenne und mit Run() starte,
    wird sie trotzdem ausgeführt. Bei Shelleexecute() ging das nur nicht,
    deshalb habe ich Run() benutzt. Leider muss man dann auf Parameter
    verzichten. :D Ich benutze gerne eigene Dateiendungen für Cores o.Ä.
    Autoit ist ja kein multithreading system, da muss man andere Maßnahmen
    treffen. :P

  • Hallo Sunlight

    Nur weil ShellExecute() die Möglichkeit bietet Parameter explizit anzugeben heisst das noch lange nicht, dass du bei Run() keine Parameter benutzen kannst. Parameter werden unter Windows ans Ende der .exe angehängt. Also würde ein Aufruf via Run so aussehen:

    AutoIt
    Local $Programm = "C:\Programme\Programm.exe"
    Local $Parameter = "-Param1 -Param2"
    Local $pid = Run($Programm & " " & $Parameter)
    ;oder alternativ gehts auch so
    Local $pid = Run("C:\Programme\Programm.exe -Param1 -Param2")

    Damit wird das Programm mit den beiden Parametern gestartet.

    Ausserdem ändert sich die Datei nicht, nur weil du die Endung änderst ;)

    Ich benutze gerne eigene Dateiendungen für Cores o.Ä.

    Wenn du auf diese Weise aus einem Textfile "Text.txt" eine "Test.exe" machst und diese mit einem Editor öffnest, wirst du auch weiterhin den Text lesen können.
    Darum hast du auch unter Run() kein Problem damit solch eine Datei zu starten. ShellExecute hingegen arbeitet da anders, denn es prüft vorher, ob die Dateiendung im System "anständig" registriert ist und meckert dann mit dem "öffne mit..." Dialog.
    Hättest du das gleich von Beginn an gesagt, hätte man dir das auch gleich gesagt.