2016-03-23 3 views
0

Wenn ich den folgenden Befehl in einer Eingabeaufforderung ausführen, funktioniert es:Argument für Process braucht Zitate, immer entkommt

"C:\Program Files (x86)\AppFolder\do.exe" 

Wenn ich versuche, das gleiche wie ein Prozess auszuführen:

 ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = "cmd.exe"; 
     startInfo.Arguments = @"/c ""C:\Program Files (x86)\AppFolder\do.exe"""; 

     using (Process process = Process.Start(startInfo)) 
     { 
      ... 
     } 

Es scheint nicht zu laufen. Wenn ich mir die startInfo.Arguments anschaue, sieht es so aus:

/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\" 

Was fehlt mir? Können Sie keine Argumente mit Anführungszeichen oder Leerzeichen übergeben? Ich sehe viele Beispiele, in denen Leute Gegenstände mit Leerzeichen/Anführungszeichen gut weiterreichen, aber ihnen zu folgen scheint einfach nicht zu funktionieren. Dies ist das engste Beispiel, das mir einfällt.

EDIT: Wenn ich nur eine Verknüpfung erstellen, so dass ich, keine Leerzeichen oder Anführungszeichen verwenden es funktioniert:

startInfo.Arguments = @"/c D:\_test\Do.lnk"; 
+1

_Es scheint nicht zu laufen._ Wie scheint es nicht zu laufen? Versuchen Sie, den Stil des ausgeblendeten Fensters zu entfernen und ändern Sie die Option "/ c" in eine Option "/ k". Ich wette, Sie werden eine Fehlermeldung in dem Konsolenfenster sehen, das jetzt verweilt. –

Antwort

1

Ich benutze keine ‚@‘. Dies ist die korrekte Implementierung:

startInfo.Arguments = "/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\""; 
+0

'"/c \ "C: \\ Programme (x86) \\ AppFolder \\ do.exe \" "' ist genau die gleiche Zeichenfolge wie '@"/c "" C: \ Programme (x86) \ AppFolder \ do.exe "" "'. Wie Sie den Backslashes und den Anführungszeichen entkommen, macht keinen Unterschied. –