Programm mit CMD starten + Startparameter (Pfade mit Leerzeichen)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    Programm mit CMD starten + Startparameter (Pfade mit Leerzeichen)

    Hallo Freunde,

    ich komm seid mehreren Stunden nicht mehr weiter.
    Und zwar möchte ich ein Programm starten, das als Parameter zwei Pfade braucht.
    Soweit kein Problem, denn über die Windowsverknüpfung funktioniert es, nur mit C# nicht.

    Hier mein Snippet:

    C#-Quellcode

    1. Process p = new Process();
    2. ProcessStartInfo info = new ProcessStartInfo();
    3. info.FileName = "cmd";
    4. string Filename = Path.Combine(AppData.Data.MyPath, "Datei1.exe");
    5. string Output = Path.Combine(AppData.Data.MyPath, "Output.exe");
    6. string TargetFile = "Datei.exe";
    7. string args = string.Format("/C start \"\" \"{0}\" \"{1}\" \"{2}\"", TargetFile, Filename, Output);
    8. info.Arguments = args;
    9. p.StartInfo = info;
    10. p.Start();
    11. p.WaitForExit();


    Normal muss alles was ein Leerzeichen hat im Pfad ja mit in "" stehen.
    Hatte da bis jetzt noch nie Probleme.
    Nur wenn es Parameter sind, da bin ich am verzweifeln.


    Vielen Dank im Voraus.
    Ich hab das mal in ne interpolierte Zeichenfolge umwandeln lassen. Ergebnis bleibt ja gleich. Schau Dir den Anhang mal an und gib bescheid, wie das eigentlich aussehen sollte.
    Bilder
    • ProcessArguments.png

      4,7 kB, 506×122, 107 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Keine Ahnung, aber ich glaube kaum. Erstell doch mal per Hand eine valide Befehlszeile inkl. Argumente und zeig, wie die aussieht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Oke.
    Hatte eben noch eine Idee.

    Hier mal wie es funktioniert mit einer Verknüpfung:

    Quellcode

    1. "C:\Ordner1\Ordner 2\Delphi.exe" Datei1.exe Ziel.exe


    Wenn ich nun zb. so schreibe:

    Quellcode

    1. "C:\Ordner1\Ordner 2\Delphi.exe" Datei 1.exe Ziel.exe

    funktioniert es nicht mehr.

    Auch so passiert nichts:

    Quellcode

    1. "C:\Ordner1\Ordner 2\Delphi.exe" "Datei 1.exe" Ziel.exe
    2. oder
    3. "C:\Ordner1\Ordner 2\Delphi.exe" "Datei 1.exe" "Ziel.exe"


    Kann ich mir schon gut vorstellen, das des Tool keine Leerzeichen unterstützt:)
    Wäre natürlich sehr doof.
    Mir kommt da was aus DOS-Zeiten hoch.
    Probier mal z.B. Datei~1.exe statt Datei 1.exe
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @n1nja: Dann solltest Du wohl in der Doku des Delphi-Programms wühlen, wie dieses mit entsprechenden Parametern/Argumenten umzugehen pflegt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Des Tool ist schon ewig alt und in meinen Besitz. Kenne weder den Autor, noch hab ich Dokus dazu:(

    Ist wahrscheinlich ein 0815 Tool gewesen.
    Es macht im Prinzip nix anderes, als eine Datei zu signieren. Des Zertifikat holt es sich von der ersten Datei.

    Ob sowas mit C# möglich ist, weiß ich nicht.
    Da bin ich grad am probieren.
    Auch mit den Signtool von Microsoft.

    n1nja schrieb:

    Das Programm wo ich aufrufe, ist im Delphi geschrieben denk ich.
    Den Pfad macht das System, die Parameter macht das aufgerufene Programm.
    Mach Dir mal ein VB-Programm und sieh Dir an, was das Framework draus macht, da hast Du in jeder Zeile ein einzelnes Argument:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. RichTextBox1.Lines = Environment.GetCommandLineArgs()
    3. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Abend,

    habe mich nochmal schlau gemacht mit diesen Tool.
    Es kommt wirklich nicht mit Parameter zurecht, die ein Leerzeichen enthalten.

    Ich muss mich übrigens noch korrigieren, das Tool ist nicht in Delphi geschrieben, sondern in VB6.

    Hab es nun anders gelöst, indem ich die betroffenen Datein erst in einen anderen Ordner kopiere, ohne Leerzeichen.