CreateProcess/system aber wie?



  • Dann muss ich CreateProcess verwenden. aber ich werd aus diesen syntaxdingern nicht schlau.

    Deshalb brauche ich am besten ein bisschen Code. Was der tun soll hab ich ja schon im erstenm post geschreiben.



  • Reicht Dir die Doku zu "CreateProcess" mit seinen diversen Links nicht aus?
    http://msdn2.microsoft.com/en-us/library/ms682425.aspx
    http://msdn2.microsoft.com/en-us/library/ms682512.aspx


  • Mod

    Bocky< schrieb:
    Dann muss ich CreateProcess verwenden. aber ich werd aus diesen syntaxdingern nicht schlau.

    Deshalb brauche ich am besten ein bisschen Code. Was der tun soll hab ich ja schon im erstenm post geschreiben.

    Das macht für den Befehl CD gar keinen unterschied. Vor allem würde CD mit CreateProcess gar nicht funktionieren, denn CD ist ein interner CMD.EXE Befehl und kein eigenständiges Programm.

    Was hast Du eigentlich vor? Ich finde Deine Anfrage etwas verworren.



  • Ich will auch nicht cd in createprocess verwenden, sondern einfach nur eine bat-datei mit createprocess aufrufen und wenn die bat-datei fertig ist, soll eine weitere bat-Datei aufgerufen werden, und wenn diese fertig ist, soll das Programm weiterlaufen.

    Hab nochma alles durchgelesen und so gut wie möglich übersetzt.

    String datei_pfad1;
    String pfad1;
    String datei_pfad2;
    String pfad2;
    String edit1_text = Edit1->Text;
    
    datei_pfad1 = edit1_text + "\\setup_xampp.bat";
    pfad1 = edit1_text;
    datei_pfad2 = edit1_text + "\\apache\\apache_installservice.bat";
    pfad2 = edit1_text + "\\apache\\";
    
    STARTUPINFO si1;
    PROCESS_INFORMATION pi1;
    ZeroMemory( &si1, sizeof(si1) );
    si1.cb = sizeof(si1);
    ZeroMemory( &pi1, sizeof(pi1) );
    CreateProcess(datei_pfad1.c_str(),NULL,NULL,NULL,false,0,NULL,pfad1.c_str(),&si1,&pi1);
    WaitForSingleObject( pi1.hProcess, INFINITE );
    
    STARTUPINFO si2;
    PROCESS_INFORMATION pi2;
    ZeroMemory( &si2, sizeof(si2) );
    si2.cb = sizeof(si2);
    ZeroMemory( &pi2, sizeof(pi2) );
    CreateProcess(datei_pfad2.c_str(),NULL,NULL,NULL,false,0,NULL,pfad2.c_str(),&si2,&pi2);
    WaitForSingleObject( pi2.hProcess, INFINITE );
    
    Application->MessageBox("Erfolgreiche Ausführung des Programms","Fertig",64);
    

    So funktioniert's!!

    😃 😃 😃 Danke!Danke!Danke!Danke!Danke!Danke!Danke!Danke! 😃 😃 😃



  • Zu früh gefreut:

    Wenn ich das Programm von einer Festplatte starte, funktioniert es korrekt.
    Ich hab es dann aber auf eine CD gebrannt - und es funktioniert nicht mehr.
    Die Bat-Datei findet irgenwelche Dateien nicht mehr.
    Hat jemand da ne Ahnung, woran das liegen könnte, bzw. was bedeuten die anderen angaben bei CeateProcess?



  • Also, ich schreib nochma, wann das Problem genau auftritt:
    In dem Moment, wo ich das auf eine CD brenne und versuche mit dem Programm zu kopieren, bekomme ich den Fehler. Wenn ich es mit der Kopier-Funktion von Windows-Explorer kopiere und dann die Bat-Dateien über das Programm aufrufe, bekomme ich keinen Fehler. Wenn ich das Programm von der Festplatte starte, bekomme ich ebenfalls keinen Fehler.

    hat irgendjemand ne Ahnung, wodurch das kommt????

    😕 😞 😕 😞 😕



  • Wenn ich die Dateien Brenne, mit dem Explorer kopiere und dann die Bat-Dateien "von Hand" aufrufe, funktioniert es.
    Muss CreateProcess() irgendwelche Temporären Dateien Schreiben, die es auf einer CD nicht schreiben kann?
    Oder muss ich irgendeinen Parameter von CreateProcess ändern, damit die Bat-Datei sozusagen so aufgerufen wird, wie mit einem Doppelklick????????

    ???????????????????????



  • Hab mal ShellExecute ausprobiert, es tritt genau der gleiche Fehler an genau den gleichen Stellen auf.
    Komisch, nicht?



  • wahrscheinlich ne dumme Frage, aber ich benutze VC++ 2005 und ich will ne Windowsapplikation mit CreateProcess launchen oder allgemein was was mit WinAPI zu tun hat machen (windows.h ist eingebunden) und ich hab ne Win32 Konsolenanwendunge, haut er mir Compilerfehler



  • Bocky< schrieb:
    Muss CreateProcess() irgendwelche Temporären Dateien Schreiben, die es auf einer CD nicht schreiben kann?

    Nein.

    Bocky< schrieb:
    Komisch, nicht?

    Was ist, wenn du die Dateien auf der Festplatte läßt und als schreibgeschützt kennzeichnest?

    @cpp newbie:
    1. Neue Frage, neuer Thread
    2. hier nachschauen
    (wär das nicht mal was für die FAQ?)



  • Das liegt tatsächlich an den Schreibrechten. Ich hab in meinem Programm ne Kopierfunktion, die die Dateien einfach nur kopiert, also die Dateioptionen von der CD übernimmt (schreibgeschützt). Nun hab ich nach dem kopieren einer Datei einfach den Schreibschutz der gerade kopierten Datei gelöscht. So funktioniert das jetzt. 🙂


Anmelden zum Antworten