Kommandozeilenparameter und system()



  • Hallo,

    bisher hab ich über

    std::string robo_sync = "robocopy D:\\Testordner E:\\Computer\\2014-12-16_22-30 /MIR /COPY:DT /PURGE /FFT /R:2 /W:1";
    system(robo_sync.c_str());
    

    einen Robocopy Befehl über die cmd laufen lassen. Hier wird der Ordner D:\Testordner nach E:\Computer\2014-12-16_22-30 gespiegelt. Funktioniert auch.

    Nun möchte ich das Programm ShadowSpawn.exe mit einbinden, um so vorher eine Volume Shadow Kopie zu mounten.
    Der Befehl dazu sieht wie folgt aus:

    shadowspawn D:\Testordner Q: robocopy Q:\ "E:\Computer\2014-12-16_22-30" /MIR /COPY:DT /PURGE /FFT /R:2 /W:1
    

    Hier wird zuerst "D:\Testordner" in Q: gemountet und dann mit Robocopy von Q:\ nach "E:\Computer\2014-12-16_22-30" gespiegelt.

    Wenn ich das ganze jetzt wieder in C++ übertrage

    std::string robo_sync = "shadowspawn D:\\Testordner Q: robocopy Q:\\ E:\\Computer\\2014-12-16_22-30 /MIR /COPY:DT /PURGE /FFT /R:2 /W:1";
    system(robo_sync.c_str());
    

    kommt die Meldung "Der Befehl "shadowspawn" ist entweder falsch geschrieben oder konnte nicht gefunden wurden."

    selbst wenn ich

    system("ShadowSpawn");
    

    eingebe kommt die Fehlermeldung.

    Wenn ich "ShadowSpawn" direkt in die cmd schreibe kommen wenigstens noch irgendwelche Hinweise.

    Wo liegt der Fehler?



  • 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.


  • Mod

    Und Du bist sicher, dass diese Befehle nicht hintereinander ausgeführt werden müssen?

    Sieht für mich falsch aus. Wenn also entweder der Separator (& oder &&) für die Command Shell verwenden oder eben zweimal ausführen.



  • Ich nehme an du musst den kompletten Dateipfad von ShadowSpawn angeben.



  • Erst mal danke für die Antworten.

    Genau in dieser Form muss ich es in die Komandozeile eintippen (oder als .bat abspeichern) und damit funktioniert es auch.

    shadowspawn D:\Testordner Q: robocopy Q:\ "E:\Computer\2014-12-16_22-30" /MIR /COPY:DT /PURGE /FFT /R:2 /W:1
    

    Ich habe natürlich auch schon den kompletten Pfad zu shadowspawn.exe ausprobiert, aber auch ohne Erfolg.

    Das komische daran ist ja wenn ich

    system("ShadowSpawn");
    

    ausführe (wenn shadowspawn.exe im System32 Ordner liegt), sowie

    system("c:\\ShadowSpawn");
    

    wenn es direkt in c:\ liegt, führen zu dem Fehler "Der Befehl "shadowspawn" ist entweder falsch geschrieben oder konnte nicht gefunden wurden."

    Sobald ich die gleichen Kommandos in die cmd oder eine .bat schreibe bekomme ich noch weitere Infos zu shadowspawn.exe.

    Selbst wenn ich mir die Kommandos über c++ in eine .bat schreibe und dann die .bat über c++ starte

    system("c:\\Beispiel.bat");
    

    bekomme ich die Fehlermeldung.



  • Ich tippe auf fehlende " im in den Pfadangaben.



  • Wo meinst du fehlen die "?

    Vielleicht hat ja jemand Lust das Programm über C++ aufzurufen und einmal zu schauen ob der Aufruf bei ihm funktioniert.
    Hier gibt's das Programm:
    https://github.com/downloads/candera/shadowspawn/ShadowSpawn-0.2.2-x64.zip
    Wenn shadowspawn.exe im System32 Ordner liegt über

    system("ShadowSpawn");
    

    aufrufen, oder testweise über cmd.

    Ich würde mich sehr freuen, danke.



  • ShadowSpawn benötigt Admin-Rechte.
    Bei Aufruf über die Eingabeaufforderung erscheint UAC-Dialog.
    Funktioniert.

    Aufruf via system ohne Admin-Rechte des aufrufenden Programms:

    system("ShadowSpawn") ;    // funktioniert
    

    Zumindest erscheint keine Fehlermeldung.

    Schönen Abend noch.



  • Danke Testerius.

    Ich hab es jetzt auch nochmal getestet. Unter Win7 Pro 64bit funktioniert es nicht, mit Win 8.1 Pro 64bit funktioniert es.
    Keine Ahnung warum.


Log in to reply