2010-03-13 10 views
9

Otrzymuję komunikat o błędzie podczas uruchamiania następującego kodu z programu konsoli C#.System nie może znaleźć pliku określonego podczas uruchamiania programu CMD.exe z C#

"System nie może odnaleźć pliku podano"

Oto kod:

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

Dziwnie, gdy pomijam przełącznik/c, polecenie może działać!?!

Jakieś pomysły, co robię źle?

+0

Mam ten sam problem, ale z linii poleceń: U: \> cmd.exe Microsoft Windows [Wersja 6.1 .7601] Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone. System nie może znaleźć określonej ścieżki. – Edmondo1984

Odpowiedz

11

Process.Start przyjmuje nazwę pliku jako argument.Przekazać argument jako drugi parametr:

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

potrzebujesz dodać @ przed ścieżką. w ten sposób: @ "C: \ Windows \ System32 \ cmd.exe/c"

3

Przeciążenie początku do podjęcia argumentów. Zamiast tego użyj tego.

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

Brakuje argumentu '/' do argumentu wiersza poleceń. – Oded

+0

Zaktualizowany, dziękuję! –

0

Uważam, że problem polega na tym, że próbujesz przekazać argument (/ c) jako część ścieżki.

Argumenty i nazwa pliku są dwoma odrębnymi elementami w klasie Proces.

Spróbuj

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

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

7

Cóż, z jednej strony, jesteś ciężko kodowania ścieżkę, która jest już przeznaczone do złamania w systemie czyjejś (nie każdy system Windows zainstalować w C:\Windows) .

Ale problemem jest to, że te ukośniki odwrotne są używane jako znaki ucieczki. Istnieją dwa sposoby, aby napisać ciąg ścieżki tak - albo uciec backslashy:

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

lub użyj @ aby wyłączyć backslash ucieczki:

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

Należy również zdać /c jako argument, nie jako część ścieżki - użyj drugiego przeciążenia z Process.Start, jak pokazano powyżej.

3

widzę trzy problemy z kodem ty Wysłany:

1) Nie uciekają swój ciąg ścieżki poprawnie
2) Musisz zdać/c argumentem osobno na ścieżkę, którą chcesz wykonać
3) jest to przy założeniu, że każde urządzenie ma kod działa na AC: \ instalację systemu Windows

Chciałbym zaproponować pisanie go w następujący sposób:

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

Najprostszym sposobem jest dodanie programu do rozwiązania z ADD istniejącego elementu i wpisz

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

Nie wydaje się, aby odpowiedzieć na zadane pytanie. OP ma do czynienia z argumentami wiersza poleceń, których w ogóle nie demonstrujesz. – cHao

Powiązane problemy