Probleme mit Systemaufruf System()
-
Hallo Zusammen,
ich benutze Visual C++ 2008 Express Edition und arbeite gerade an einem kleinen Projekt. Ich bin kurz vorm Ziel, aber ich bekomme einen Systemaufruf nicht hin..
Wenn ich auf der DOS-Konsole
"c:\Programme\Office 2007 Tool\test.bat" "argument 1"
eingebe, dann wird test.bat gestartet und der parameter "argument 1" als ein Parameter übergeben...Aber wenn ich aus meinem Programm heraus
system("\"c:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 1\"");
aufrufe, startet das Programm leider nicht. es kommt zwar kurz ein schwarzes Fenster, aber es bleibt nicht stehen, obwohl die erste Anweisiung in der test.bat datei eine PAUSE ist.kleiner hinweis
system("\"C:\\Programme\\Office 2007 Tool\\test.bat\"");
einwandfrei, aber ich muss halt ein Argument mit übergeben.Ich wäre euch für eure Mithilfe sehr dankbar...
Mit freundlichen Grüßen, Dominik L.
-
ops ich meinte statt
system("\"C:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 2\"");
system("\"C:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 2\"");
Grüße, Dominik Linz
-
Du notierst es auch so, ja (Anführungszeichen als Escapesequenzen)?
system("\"c:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 1\"");
-
[cpp]
system("\"C:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 2\"");
[/cpp]So, nun aber. diese Zeile funktioniert nicht.

musste nochmal zweimal schreiben, weil meine backslashes verschwunden sind..Dominik L
-
Ich würde ja vermuten, dass du das Leerzeichen zwischen bat-Datei und Argument vergessen hast. Dann würde die PAUSE-Anweisung logischerweise nicht ausgeführt (da keine Datei test.batArgument1 existiert). Aber in deinem Beispiel hast du eins drin...
-
Matze, ich habe es genauso gemacht wie du.
Habe gerade sogar extra nochmal deine ausprobiert. Ist aber genau dass selbe Problem.
Ich versteh das einfach nicht. Mir ist das ein Rätsel!
-
Warum schliesst Du eigentlich den Aufruf der Bat Datei in eigene Anführungszeichen ein? sollten die nicht besser da verschwinden?
-
Hundeman schrieb:
Warum schliesst Du eigentlich den Aufruf der Bat Datei in eigene Anführungszeichen ein? sollten die nicht besser da verschwinden?
Ich glaube, das ist kein Problem (zumindest unter neueren Windows-Systemen). Oder irre ich mich da?
-
Nee, weil die Pfadangabe Leerzeichen enthält muss ich sie in Anührungszeichen setzten.
Das ist aber nicht das Problem, weil er die Datei ja startet, wenn ich kein Argument übergebe
-
Richtig, nur vermute ich, dass wenn du die Anführungzeichen schliesst der Eingabestring damit als abgeschlossen betrachtet wird. Damit würde dann der Parameter ignoriert werden.
-
Hundeman schrieb:
Richtig, nur vermute ich, dass wenn du die Anführungzeichen schliesst der Eingabestring damit als abgeschlossen betrachtet wird. Damit würde dann der Parameter ignoriert werden.

Das sind Anführungszeichen in dem String, damit ist der String nicht abgeschlossen...
-
Ja, das weiß ich, aber weißt du 100%ig wie ein solcher Aufruf intern gehändelt wird? Das der Parameter im String noch angehängt wird ist mir klar, nur scheint die Bat datei dies ja irgendwie nicht mitzubekommen. Also ist für mich die erste Vermutung das der Aufruf der Bat Datei nicht so ist wie er sein sollte. Und der einzige Punkt an dem ich anzusetzen wüsste sind die zusätzlichen Anführungszeichen.
-
Hundegang, ja das stimmt.
aber wenn ich
system("\"c:\\Programme\\Office 2007 Tool\\test.bat\" argument2");aufrufe wird test.bat gestartet und argument2 ist als %1 verfügbar
also das Problem muss wo anders liegen..
-
Hundeman schrieb:
Ja, das weiß ich, aber weißt du 100%ig wie ein solcher Aufruf intern gehändelt wird? Das der Parameter im String noch angehängt wird ist mir klar, nur scheint die Bat datei dies ja irgendwie nicht mitzubekommen. Also ist für mich die erste Vermutung das der Aufruf der Bat Datei nicht so ist wie er sein sollte. Und der einzige Punkt an dem ich anzusetzen wüsste sind die zusätzlichen Anführungszeichen.
Wenn der PAUSE-Befehl in der Batchdatei noch nicht mal ausgeführt wird, heißt das ja eigentlich, dass sie gar nicht aufgerufen wird. Der Fehler ist also nicht mal der fehlende Parameter (deshalb meine Vermutung mit dem vergessenen Leerzeichen). Hm...
-
Neue Erkenntniss:
wenn ich
system("\"c:\\Programme\\Office 2007 Tool\\test.bat\" \"argument 1\"");starte, komm die Fehlermeldung
"Der Befehl "c:\programme\office" ist entweder falsch geschrieben oder konnte nicht gefunden werden"
-
Dominik L. schrieb:
Hundegang, ja das stimmt.
aber wenn ich
system("\"c:\\Programme\\Office 2007 Tool\\test.bat\" argument2");aufrufe wird test.bat gestartet und argument2 ist als %1 verfügbar
also das Problem muss wo anders liegen..
Woher weißt Du das das Argument verfügbar ist wenn die Software nicht richtig startet?
-
Willst du das nicht lieber mit CreateProcess oder so machen? Da kannst du über die cmd.exe auch Batchdateien starten. Ist wahrscheinlich die sinnvollere Variante.
-
Wenn das Argument keine Leerzeichen enthält, kann ich es ohne Anführungszeichen schreiben. Dann startet er die Bat mit Argumenten. Wenn ich Allerdings das Argument in Anführungszeichen setzte, findet er nicht mal die Bat Datei...
sehr mysteriös..
scheint aber kein Visuall c++ 2008 spezifisches Problem zu sein, weil Dev C++ 4.9 ebenfalls streikt mit dem selben Verhalten..
-
Wie gesagt:
_matze schrieb:
Willst du das nicht lieber mit CreateProcess oder so machen? Da kannst du über die cmd.exe auch Batchdateien starten. Ist wahrscheinlich die sinnvollere Variante.

-
Danke für eure mithilfe und den Hinweis auf Alternativ-Lösungen. Aber mich interresiert trotzdem das Problem an sich..