Система не может найти файл, указанный при запуске CMD.exe из C # - PullRequest
9 голосов
/ 13 марта 2010

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

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

Воткод:

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

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

Есть идеи, что я делаю не так?

Ответы [ 7 ]

11 голосов
/ 13 марта 2010

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

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c");
7 голосов
/ 13 марта 2010

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

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

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

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

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

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

3 голосов
/ 13 марта 2010

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

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

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

string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe");
System.Diagnostics.Process.Start(cmdPath, "/c"); 
3 голосов
/ 13 марта 2010

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

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe",  "/c");
0 голосов
/ 20 августа 2012

Самый простой способ - добавить программу в решение с ДОБАВИТЬ СУЩЕСТВУЮЩИЙ ПУНКТ и набрать

System::Diagnostics::Process::Start("ccsetup305.exe");
0 голосов
/ 13 марта 2010

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

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

Попробуйте

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

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

0 голосов
/ 13 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...