C++ andere EXE aufrufen, Probleme mit Leerzeichen im Pfad
Hallo
Ich scheitere gerade daran ein kleines C++ Programm zu schreiben, welches eine andere EXE starten soll.
Das wollte ich eigentlich mit dem Aufruf system() lösen, soweit geht das auch aber wenn ich dem Aufruf system(mein Befehl mit Parametern) benutz schaff ichs nicht mehr.
Der Fehler lautet immer:
Kann mir hier jemand helfen?
Wenn ich den Aufruf über system("\"C:\\Program Files (x86)\\Anwendung XY\\Anwendung.exe\"";) mache klappt es.
Ich hab schon versucht zusätzliche Anführungszeichen anzufügen oder "\\\" einen Backslash mehr aber ich kriegs nicht hin.
Danke und Gruss
P.
Ich scheitere gerade daran ein kleines C++ Programm zu schreiben, welches eine andere EXE starten soll.
Das wollte ich eigentlich mit dem Aufruf system() lösen, soweit geht das auch aber wenn ich dem Aufruf system(mein Befehl mit Parametern) benutz schaff ichs nicht mehr.
Der Fehler lautet immer:
Der Befehl "C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Kann mir hier jemand helfen?
#include <iostream>
using namespace std;
int main(int argc, char *argv) {
string befehl = "\"C:\\Program Files (x86)\\Anwendung XY\\Anwendung.exe";
string argumente;
string space = " ";
//Argumente zusammenfügen
for (int iLoop=1; iLoop < argc; iLoop++)
argumente = argumente + space + argv[iLoop];
//Befehl mit Argeumenten zusammenfügen
befehl.append(argumente);
befehl = befehl + "\""; //Abschliessendes " anfügen
cout << befehl;
//Befehl in für system konvertieren
system(befehl.c_str());
return 0;
}
Wenn ich den Aufruf über system("\"C:\\Program Files (x86)\\Anwendung XY\\Anwendung.exe\"";) mache klappt es.
Ich hab schon versucht zusätzliche Anführungszeichen anzufügen oder "\\\" einen Backslash mehr aber ich kriegs nicht hin.
Danke und Gruss
P.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 330919
Url: https://administrator.de/contentid/330919
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
14 Kommentare
Neuester Kommentar
"\"C:\\Program Files (x86)\\Anwendung XY\\Anwendung.exe";
hier fehlt noch ein führendes \" das abschließende \"Die Anführungszeichen müssen einmal um den Pfad der Anwendung und dann wenn die Argumente ebenfalls Leerzeichen haben jeweils auch umschlossen mit Anführungszeichen und um den ganzen Ausdruck.
Es soll ja das hier im Endeffekt bei rauskommen :
""C:\Program Files (x86)\Anwendung XY\Anwendung.exe" "ARG1" "ARG2" "ARGN""
nicht das hier
"C:\Program Files (x86)\Anwendung XY\Anwendung.exe ARG1 ARG2 ARGN"
da würde er alles inkl Argumente als den "Anwendungspfad" interpretieren.
Gruß
Das sind jetzt 2 Sachen.
Das eine ist die Syntax der erzeugten Kommandozeile. Das ist ja unabhängig von der Programmiersprache.
C++ beherrsche ich nur rudimentär. Da hilft mir meistens mein Freund Google weiter.
Bzgl. Aufruf eines Kommandos habe ich jetzt spontan gefunden:
http://stackoverflow.com/questions/31201631/execute-cmd-commands-using- ...
http://stackoverflow.com/questions/14633155/how-to-execute-windows-syst ...
https://social.msdn.microsoft.com/Forums/vstudio/en-US/49f66662-0921-4c5 ...
Möglichweise geht das mit "system(...);" nicht und Du musst stattdessen "ShellExecute(...);" verwenden. Oder "CreateProcess(...);"
Das eine ist die Syntax der erzeugten Kommandozeile. Das ist ja unabhängig von der Programmiersprache.
C++ beherrsche ich nur rudimentär. Da hilft mir meistens mein Freund Google weiter.
Bzgl. Aufruf eines Kommandos habe ich jetzt spontan gefunden:
http://stackoverflow.com/questions/31201631/execute-cmd-commands-using- ...
http://stackoverflow.com/questions/14633155/how-to-execute-windows-syst ...
https://social.msdn.microsoft.com/Forums/vstudio/en-US/49f66662-0921-4c5 ...
Möglichweise geht das mit "system(...);" nicht und Du musst stattdessen "ShellExecute(...);" verwenden. Oder "CreateProcess(...);"
Hallo.
Also quasi so:
Der String 'befehl' muss eine Zeichenfolge sein, wie sie in diesem Kontext gültig ist. In diesem Fall muss um die gesamte Zeichenfolge noch ein zusätzliches Paar Anführungszeichen gesetzt werden. Resultierend so:
... inclusive aller hier gezeigten Anführungszeichen.
Wie das zu escapen ist, sollte klar sein. Ansonsten helfe ich gerne aus ...
Grüße
rubberman
Möglichweise geht das mit "system(...);" nicht
Doch, funktioniert wunderbar. Man muss nur wissen, was beim Aufruf der system() Funktion unter Windows passiert. Es wird ein cmd.exe Prozess erzeugt und Option /c zusammen mit der Kommandozeile übergeben.Also quasi so:
%comspec% /c befehl
""C:\Program Files (x86)\Anwendung XY\Anwendung.exe" "asdf" "asdf""
Wie das zu escapen ist, sollte klar sein. Ansonsten helfe ich gerne aus ...
Grüße
rubberman