So führen Sie eine einfache Befehlszeile mit CreateProcess?

Möchte ich ausführen einer einfachen Kommandozeile, aber ohne, um ein Fenster zu erscheinen. Daher kann ich nicht verwenden, System und Funktion CreateProcess, soweit ich weiß.
Also ich habe den folgenden code zum Beispiel:

//.../

CreateProcess(NULL,input,NULL,NULL,false,NORMAL_PRIORITY_CLASS | 
 CREATE_NO_WINDOW,NULL,NULL,&startInf,&procInf);//)

//.../

Wenn die Eingabe eine Zeile wie "ping www.google.com -n-2" es scheint zu funktionieren.
Was ich brauche, ist die löschen-Funktion.
Deshalb habe ich versucht, eine Menge von Variationen wie:

input = "rd /S /Q \"D:\ALEX_DATEN\PC\C++\bla\"";

und

  input = "rd /S /Q \"D:/DATEN/PC/C++/bla\"";

Aber nichts passiert, und die Funktion gibt den Fehler :/
Wenn ich Schreibe es als .bat-Datei (ohne die "\" Escape chars) das löschen funktioniert perfekt!

Weiß jemand, was ich falsch mache?

P. s. Nein, ich bin nicht schriftlich eine zerstörerische virus.. wenn das gewesen wäre, mein Ziel, hätte ich definitiv gefunden habe, einfachere Möglichkeiten...

  • Versuchen ShellExecute vielleicht?
  • HM, ich weiß nicht wirklich sehen, warum verwenden Sie diese. Soweit ich udnerstand hier: msdn.microsoft.com/en-us/library/windows/desktop/... es ausführen will eine Datei, aber ich muss nur eine Zeichenfolge auszuführen...
  • cppguy Recht, imo; ShellExecute ist ausgelegt für die Ausführung von Befehls-Zeilen, während CreateProcess ausgelegt ist zum ausführen einer bestimmten EXE-Datei. So, wie ich es sehe, einige Ihrer Optionen sind 1) Verwenden Sie ShellExecute, 2) Erstellen Sie eine dummy-ausführbare Datei, die wraps ShellExecute (oder so ähnlich) und führen Sie den dummy über CreateProcess, oder 3) sehen, wenn Sie direkt ausführen die binären realisiert, dass der rd-Befehl. IMO, ShellExecute ist der Weg des geringsten Widerstandes.
  • rd ist ein Befehl in die shell integriert, so können Sie nicht ausführen (zumindest direkt) mit CreateProcess. Es zu tun, würden Sie ausführen müssen cmd.exe wie die ausführbare Datei, und führen Sie Ihre rd /S ....
  • Oh okey o-o Interessant. Also nicht, dass heißt, ich kann als argument lpFile, einfach die Befehlszeile?
  • Jerry Sarg: ahhh.. okey, das macht Sinn auch!
  • Die Funktion system() wäre einfacher.
  • Carey, Gregory, ja, aber es dispalys ein Fenster, was ich nicht will! Und ich Schaffe es nicht zu machen ShellExecute funktioniert.. =/
  • +1 gute Frage! Vielen Dank, es war genau das, was ich suchte.

InformationsquelleAutor DragonGamer | 2012-10-16
Schreibe einen Kommentar