Richtige Verwendung von Parametern bei ShellExecute



  • ich versuche die ganze Zeit einen Befehl mit Shellexecute auszuführen.

    Der Befehl als ganzes (Funktioniert mit system) lautet:

    Test.exe < testquelle.c > testquelleneu.c
    

    Mein Aufruf von ShellExecute lautet nun:

    ShellExecute(NULL,"open","Test.exe"," < testquelle.c > testquelleneu.c","C:\\Testprogramm\\",SW_SHOW);
    

    Die Test.exe wird aufgerufen, aber das mit den Shiften (< und >) klappt nicht.
    Woran könnte das liegen?

    Gruß Paddy



  • Paddy82 schrieb:

    Woran könnte das liegen?

    Das könnte daran liegen, dass die Umleitungsanweisungen nicht als Parameter an Test.exe geschickt werden dürfen, sondern an die ausführende Shell übergeben werden müssen.



  • Wie kann ich das denn machen?

    Geht das überhaupt mit ShellExecute?



  • Du könntest mit ShellExecute direkt die Shell starten und der die Parameter übergeben, bei cmd.exe z.B. mit /C oder /K. Oder du benutzt CreateProcess, da kannst du die Standardhandles direkt umleiten.



  • ich habe mich jetzt für die Alternative mit Create Process entschieden.

    in der Struktur STARTUPINFO gibt es drei Handles für die StdStreams:

    typedef struct _STARTUPINFO {  DWORD cb;  LPTSTR lpReserved; ...  HANDLE hStdInput;  HANDLE hStdOutput;  HANDLE hStdError;
    } STARTUPINFO, *LPSTARTUPINFO;
    

    Wie kann ich denn nun meine Dateien dort angeben?

    HANDLE meinInput;
    meinInput = "C:\\Testprogramm\\testquelle.c";
    
    STARTUPINFO si;
    si.hStdInput = meinInput;
    

    So funktioniert es leider auch nicht



  • Ein HANDLE auf eine Datei bekommst du üblicherweise mit CreateFile.


Anmelden zum Antworten