c++ Neuen Prozess in neuer Konsole öffnen
-
Hallo zusammen Ich habe folgendes Problem.
Ich möchte in meiner Main ein Programm starten, welches einfach nebenherläuft,
also z.b. möchte ich Firefox.exe starten während ich in meiner Konsole bin, und während firefox läuft, in meinem Code weitermachen (Konsolenanwendung).Mein Problem ist aber, dass mein Code nicht weiterläuft solange Firefox.exe noch läuft. Habe allerlei Sachen bisher ausprobiert, inkl System(...) und CreateProzess von Windowos, kann mir da jemand helfen ?
hier meine Versuche :
string evalstring = "cmd /c call "; evalstring.append(it->c_str()); system(it->c_str());
Also in einer Konsole "cmd /c call C:\\firefox.exe "z.b.
Problem hierbei, es wird auf terminierung gewartet.
Aber auch nicht immer, jeder 10te Versuch läuft durchVersuch 2 :
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); wchar_t wtext[256]; mbstowcs(wtext, filepathexecutecommand.c_str(), strlen(filepathexecutecommand.c_str()) + 1);//Plus null LPWSTR ptr = wtext; // Start the child process. CreateProcess(NULL, // No module name (use command line) ptr, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE CREATE_NEW_CONSOLE, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi); // Pointer to PROCESS_INFORMATION structure; CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
Selbes Problem wie oben Kann mir jemand weiter helfen ?
Der Versuch eine Batch datei zu erstellen und diese dann zu starten, damit diese den gewünschten Prozess starten klappt leider auch nicht.
-
Probier mal
cmd /c start "Window Title" Firefox.exe
Der "Window Title" Parameter wird zwar für GUI Anwendungen nicht verwendet, angeben muss man ihn aber trotzdem.
Ansonsten probier bei CreateProcess mal
CREATE_BREAKAWAY_FROM_JOB | DETACHED_PROCESS
als Flags stattCREATE_NEW_CONSOLE
zu übergeben.
-
Folgefrage :
folgendes Szenario :Ich habe nun meine a.exe auf dem Desktop und starte damit b.exe welches sich im Ordner Dokumente befindet.
a läuft und b läuft. Nun erstellt b aber Dateien und legt sie, statt um b herum bei a ab. Was kann ich dagegen tuen ?An den quellcode von b.exe komme ich nicht, und
for(int i=0;i<8;i++) system("cd .."); string command = "cd "; command.append(changepathto); string evalstring = "cmd /c start "; evalstring.append("\"Window title\" "); evalstring.append(filepath); system(evalstring.c_str());
klappt leider auch nicht
Ich wollte ihm vorgaukeln ich wäre in dem Pfad aber da macht der nicht mit.
-
CreateProcess()
hat einen Parameter fürs Working Directory.
-
system("cd ..");
bringt nix, da es nur das Working Directory des Child-Prozesses ändert der "cd" Ausführt.
NimmSetCurrentDirectory
.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Bitte schalte Code Tags auch an in Deinem Profil, wenn Du sie auch verwendest. Das hilft schon etwas
-
Hm, ich hätte hier vermutlich ShellExecute() verwendet. Hat es einen Grund, warum das bisher nicht genannt wurde? Startet Prozesse, ohne auf die Terminierung zu warten und man kann das Arbeitsverzeichnis mit übergeben.
-
ShellExecute
führt "Shell Verben" aus.
D.h. welcher Prozess mit welchen Parametern dann wirklich gestartet wird, ist abhängig davon wie das System konfiguriert ist.Wenn man also eine ganz bestimmte .exe starten möchte, dann ist
ShellExecute
nicht die passende Funktion dafür. Wenn man dagegen das machen möchte was passiert wenn man ein bestimmtes File im Explorer doppeltklickt, dannShellExecute
genau die richtige funktion.
-
Ok, danke für die Aufklärung.
/OT Zu meiner Entschuldigung: Offensichtlich haben die gut acht Jahre, in denen ich nichts mehr programmiert habe, ihre Spuren hinterlassen. Vielleicht sollte ich mich wieder mehr mit diesem Bereich beschäftigen, bevor der Rest auch noch weg ist...
-
Million Voices schrieb:
Ok, danke für die Aufklärung.
/OT Zu meiner Entschuldigung:
Bitte. Und keine Entschuldigung nötig.
ShellExecute
wird sehr oft verwendet, und daher auch oft empfohlen - mMn. auch oft wo es halt nicht angebracht ist.Wobei es beim Starten von .exen mit
ShellExecute
zugegebenermassen mehr-oder-weniger egal ist. Man kann zwar sein Windows so konfigurieren dass bei nem Doppelklick auf ne .exe nicht die .exe gestartet wird sondern irgend ein anderes Programm. Es gibt dann aber sehr viele Dinge die nicht mehr funktionieren - ein Programm mehr oder weniger macht dann schon kaum mehr nen Unterschied.
Sogesehen könnte es schon "akzeptabel" sein .exen mitShellExecute
zu starten.Andrerseits kann man es natürlich genau so gut gleich richtig machen und
CreateProcess
verwenden