Система не может найти, что файл указал при выполнении CMD.exe от C#

Я получаю сообщение об ошибке при выполнении следующего кода из программы консоли C#.

"Система не может найти файл указанным"

Вот код:

Система. Диагностика. Процесс. Запустите ("C:\Windows\System32\cmd.exe/c");

Странно, когда я опускаю переключатель/c, команда может работать!?!

Какие-либо идеи, что я делаю неправильно?

9
задан 13 March 2010 в 15:27
поделиться

6 ответов

Process.Start принимает в качестве аргумента имя файла. Передайте аргумент в качестве второго параметра:

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c");
11
ответ дан 4 December 2019 в 09:12
поделиться

Произошла перегрузка начала возражений. Используйте его вместо этого.

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe",  "/c");
3
ответ дан 4 December 2019 в 09:12
поделиться

Ну, во-первых, вам трудно- кодирование пути, которому уже суждено взломать чью-то систему (не каждая установка Windows находится в C: \ Windows ).

Но проблема в том, что обратная косая черта используется как escape-символ. Есть два способа написать такую ​​строку пути - либо избежать обратной косой черты:

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

, либо использовать @ , чтобы отключить экранирование обратной косой черты:

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

Вам также необходимо передать / c ] в качестве аргумента, а не как часть пути - используйте вторую перегрузку Process.Start , как показано выше.

7
ответ дан 4 December 2019 в 09:12
поделиться

Я считаю, что проблема в том, что вы пытаетесь передать аргумент (/ c) как часть пути.

Аргументы и имя файла - это два разных элемента в классе Process.

Попробуйте

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

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

0
ответ дан 4 December 2019 в 09:12
поделиться

Я вижу три проблемы с кодом, который вы разместили:

1) Вы неправильно экранируете строку пути
2) Вам нужно передать аргумент / c отдельно для пути, который вы хотите выполнить
3) Вы предполагаете, что каждая машина, на которой работает этот код, имеет ac: \ windows installation

Я бы предложил написать его следующим образом:

string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe");
System.Diagnostics.Process.Start(cmdPath, "/c"); 
3
ответ дан 4 December 2019 в 09:12
поделиться

вам нужно добавить @ перед путем. вот так: @"C:\Windows\System32\cmd.exe /c"

0
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: