C int system(const *char) in den Background bei XP

  • Hallo, wie kann ich unter WinXP mit C erreichen, dass

    system("c:\test.exe"); /*(is von stdio.h)*/

    test.exe im Hintergrund öffnet, dann selber terminiert ->Eingabeaufforderung schließt sich, test.exe bleibt (wenns ein Windowsprogramm is). Ich bezweifle dass es geht, aber fragen kostet nix. Ich nehm auch gerne eine andere Methode als system...

    mfg Zentor

  • also ich habe mal ne funktion programmiert um ein windows programm (konsolenprogramm .... gcc und so um genau zu sein) zu starten! man kann auch (optional) die ausgabe in einen puffer schreiben lassen!
    -> ich verwende aber hier (und das würde ich dir auch empfehlen) funktionen der windows-api (die fkt. system spinnt glaub ich teilweise....)

    -> das aufrufende programm (also dein programm) wartet allerdings bis das aufgerufene programm (zb. "test.exe") beendet wird! -> solltest du das nicht wollen musst du halt die zeile:

    Code
    WaitForSingleObject(procInfo.hProcess, INFINITE);


    ändern!!

    mfg marX

  • Zitat von Zentor


    Hallo, wie kann ich unter WinXP mit C erreichen, dass
    syste...

    falls du VS 2003 benutzt dann werdest du in MSDN ein einfaches Beispiel finden
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/dllproc/base/creating_processes.htm

    damit es wie du willst funktioniert solltest du die letzte 3 Anweisungen löschen:

    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

  • Uff, ich hatte gehofft, es geht in C mit einer einfachen Änderung, sozusagen das "&" von Unix im system() anghängen (system("c:\\test.exe&") :) ), nur halt für XP... oder das es irgendwie mit dem Umweg über cmd.exe geht... oder so eine fork pendant bei Windows, hab bis jetzt nix gefunden. Aber so wie ich das gesehen habe läuft das ganz anders unter XP, so kann ich z.B. die besagte Command Prompt manuell schließen und das darin vorher gestartete Programm läuft weiter. Habe mich noch *überhauptnicht* mit WinAPI und niederen Funktionen vom WinKernel beschäftigt, war wie gesagt eher ein naiver ansatz...
    Also vielen Dank für die bisherigen Lösungen, die sind aber overkills. Aber wie schon im ersten Posting erwähnt schätze ich es gibt keine Lösung um system() calls ohne wait zu implementieren mit Standard-C Library Funktionen. Is aber nicht so hohe Priorität,wird wie so ziemlich alles leider im Unfertigen zustand verbleiben...

    mfg Zentor

  • noch eine Möglichkeit:

    Code
    #include <process.h>
    
    
    
    
    int main(int arcgv, char **args) {
    	_execv("c://test.exe",args);
    	return 0;
    }

    und es gibts mehrere Varianten für _exec. Eine gute Beschreibung findest du in MSDN :
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/vclib/html/_crt__exec.2c_._wexec_functions.htm

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!