Shellexecute 4ter Parameter



  • Ich möchte ein Programm mit Parametern starten. Leider wird der Parameter
    jedoch nie ausgeführt. Muss ich nun zwingend system(...) verwenden ?

    ShellExecute(NULL,"open","C:\\testoutput.exe","> output1.txt",NULL,SW_SHOW);
    


  • Wieso trennst du den Aufruf? 😕

    ShellExecute(NULL,"open","C:\\testoutput.exe > output1.txt",NULL,SW_SHOW);
    


  • Hallo, so wie von dir beschrieben habe ich es zuerst auch versucht,
    nur passierte auch da nichts. Der Parameter wurde nie ausgeführt.

    Es sieht momentan so aus, dass ich den Parameter nur gestartet bekomme,
    wenn ich direkt über cmd gehe und dort alles eintippe.

    Das kann es aber auch nicht sein 🙄



  • Ich hab mich grade mal auf die Suche gemacht.
    Versuch mal:

    CString strCmd = "C:\\testoutput.exe > output1.txt";
    	CWaitCursor csr;
    	PROCESS_INFORMATION pi = {0};
    	STARTUPINFO si = {sizeof(si)};
    
    	BOOL fReturn = CreateProcess(NULL, strCmd.GetBuffer(), NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
    	if (WAIT_TIMEOUT == WaitForSingleObject(pi.hProcess, INFINITE))
    	{
    		ASSERT(FALSE);
    		TerminateProcess(pi.hProcess, 0);
    	}
    
    	CloseHandle(pi.hProcess);
    	CloseHandle(pi.hThread);
    


  • Also erstmal vielen dank für deine Mühe!

    ich habe das eben ausprobiert und es blieb ohne Erfolg.
    Ich kann damit jede EXE starten, nur diese Anwendung nicht.
    Man kann die Anwendung nur über cmd ausführen (Konsolenanwendung).
    Ich dachte man würde das Ausführen der Datei dennoch irgendwie
    erzwingen können.

    Im schlechtesten Fall muss ich wohl die Konsole öffnen
    und mit FindWindow dann den Befehl zum ausführen dort hinsenden.
    Aber das ist mir eigentlich zu unsicher. Besteht ja doch die Möglichket,
    dass der Benutzer da irgendwie was verpfuscht wenn er zeitgleich irgendwo
    was tippt.

    😡



  • Du kannst den Kommandozeileninterpreter auch mit Parameter /C oder /K dazu bringen, einen angehängten String auszuführen:

    cmd /C ping localhost



  • Ok, ich starte das jetzt über WinExec und mit "cmd /K ...".
    So geht es immerhin erstmal!

    THX



  • Hmm noch eine Frage dazu.

    Wenn ich jetzt mehrfach mit dem Parameter /K starte habe ich irgendwann
    1000 mal cmd.exe gestartet.

    Ich habe jedoch keine andere wahl. Starte ich mit /C wird cmd sofort
    beendet, obwohl noch locker 10 minuten rechenoperationen über das
    gestartete Programm notwendig sind.

    Kann ich dem cmd-Fenster irgendwie einen neuen Fensternamen verpassen ?
    Und was mache ich wenn bereits per Hand ein Konsolenfenster geöffnet wurde?
    Das darf natürlich weder geschlossen, noch umbenannt werden.

    Alternativ muss ich irgendwie mitbekommen wann mein Aufruf fertig ist.

    hmm... ??



  • Probier es mal mit cmd start /wait deine.exe



  • sdvdsv schrieb:

    Probier es mal mit cmd start /wait deine.exe

    Was macht das? Ich habe es in der Hilfe (command /?) nicht gefunden.



  • probiere mit help start

    // WAIT Startet die Anwendung und wartet auf das Ende.


Anmelden zum Antworten