2010-03-13 19 views
9

Ich erhalte die Fehlermeldung, wenn ich den folgenden Code von einem C# -Konsolenprogramm aus starte.Das System kann die angegebene Datei beim Ausführen von CMD.exe nicht finden. C#

"Das System kann die Datei nicht finden angegeben"

Hier ist der Code:

System.Diagnostics.Process.Start ("C: \ Windows \ System32 \ cmd .exe /c ");

Seltsamerweise, wenn ich den Schalter/c auslasse, kann der Befehl ausgeführt werden!?!

Irgendwelche Ideen, was ich falsch mache?

+0

ich das gleiche Problem hinzuzufügen, aber von der Kommandozeile: U: \> cmd.exe Microsoft Windows [Version 6.1 .7601] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. Das System kann den angegebenen Pfad nicht finden. – Edmondo1984

Antwort

11

Process.Start nimmt einen Dateinamen als Argument.Führen Sie das Argument als zweiten Parameter:

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c"); 
0

müssen Sie @ vor dem Pfad hinzufügen. so: @ "C: \ Windows \ System32 \ cmd.exe/c"

3

Es gibt eine Überladung von Start, um Argumente zu nehmen. Benutze das stattdessen.

+0

Sie vermissen das '/' zum Befehlszeilenargument. – Oded

+0

Aktualisiert, danke! –

0

Ich glaube, das Problem ist, dass Sie versuchen, ein Argument (/ c) als Teil des Pfades zu übergeben.

Die Argumente und der Dateiname sind zwei unterschiedliche Elemente in der Process-Klasse.

Versuchen

System.Diagnostics.Process.Start("C:\Windows\System32\cmd.exe", "/c"); 

http://msdn.microsoft.com/en-us/library/h6ak8zt5.aspx

7

Nun, für eine Sache, sie ist hart codiert einen Pfad, der bereits auf jemandes System zu brechen ist dazu bestimmt, (nicht alle Windows zu installieren ist in C:\Windows) .

Aber das Problem hier ist, dass diese Backslashes als Escape-Zeichen verwendet werden. Es gibt zwei Möglichkeiten, um einen Weg Zeichenfolge wie folgt zu schreiben - entweder die Schrägstriche entkommen:

Process.Start("C:\\Windows\\System32\\cmd.exe", "/c"); 

Oder die @ verwenden zu deaktivieren Backslash:

Process.Start(@"C:\Windows\System32\cmd.exe", "/c"); 

Sie müssen auch /c als Argument übergeben, nicht als Teil des Pfades - verwenden Sie die zweite Überlast von Process.Start wie oben gezeigt.

3

ich drei Probleme mit dem Code sehen Sie auf dem Laufenden:

1) Sie sind nicht entkommen Sie Ihren Weg Zeichenfolge richtig
2) passieren müssen die/c Argument separat auf dem Pfad, den Sie auf
3) Sie sind unter der Annahme, jede Maschine dieser Code ausgeführt wird ausführen wollen hat ac: \ Windows Installation

ich schlage vor, würde es das Schreiben wie folgt:

string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe"); 
System.Diagnostics.Process.Start(cmdPath, "/c"); 
-1

Der einfachste Weg ist es, das Programm auf die Lösung mit auf Vorhandenes Element hinzufügen, und geben Sie

System::Diagnostics::Process::Start("ccsetup305.exe"); 
+0

scheint die gestellte Frage nicht zu beantworten. Das OP hat mit Befehlszeilenargumenten zu tun, die Sie überhaupt nicht demonstrieren. – cHao

Verwandte Themen