Я получаю сообщение об ошибке при выполнении следующего кода из программы консоли C#.
"Система не может найти файл указанным"
Вот код:
Система. Диагностика. Процесс. Запустите ("C:\Windows\System32\cmd.exe/c");
Странно, когда я опускаю переключатель/c, команда может работать!?!
Какие-либо идеи, что я делаю неправильно?
Process.Start
принимает в качестве аргумента имя файла. Передайте аргумент в качестве второго параметра:
System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c");
Произошла перегрузка начала возражений. Используйте его вместо этого.
System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c");
Ну, во-первых, вам трудно- кодирование пути, которому уже суждено взломать чью-то систему (не каждая установка Windows находится в C: \ Windows
).
Но проблема в том, что обратная косая черта используется как escape-символ. Есть два способа написать такую строку пути - либо избежать обратной косой черты:
Process.Start("C:\\Windows\\System32\\cmd.exe", "/c");
, либо использовать @
, чтобы отключить экранирование обратной косой черты:
Process.Start(@"C:\Windows\System32\cmd.exe", "/c");
Вам также необходимо передать / c
] в качестве аргумента, а не как часть пути - используйте вторую перегрузку Process.Start
, как показано выше.
Я считаю, что проблема в том, что вы пытаетесь передать аргумент (/ c) как часть пути.
Аргументы и имя файла - это два разных элемента в классе Process.
Попробуйте
System.Diagnostics.Process.Start("C:\Windows\System32\cmd.exe", "/c");
Я вижу три проблемы с кодом, который вы разместили:
1) Вы неправильно экранируете строку пути
2) Вам нужно передать аргумент / c отдельно для пути, который вы хотите выполнить
3) Вы предполагаете, что каждая машина, на которой работает этот код, имеет ac: \ windows installation
Я бы предложил написать его следующим образом:
string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe");
System.Diagnostics.Process.Start(cmdPath, "/c");
вам нужно добавить @ перед путем. вот так: @"C:\Windows\System32\cmd.exe /c"