2016-05-31 1 views
0

У меня есть следующая команда, что я хочу, чтобы запустить (который работает, когда я вручную запустить его в ЦМД):командной строки C# не работает, как предполагалось

"C:\Program Files\APP\APP.exe" -CMV "C:\Program Files\APP\Second\IT" -ID 5 6 7 4 2 

Это код, который я написал в C#:

string firstPath = @"""C:\Program Files\APP\APP.exe"""; 
string secondPath = @"""C:\Program Files\APP\Second\IT"""; 
string command = firstPath + " -CMV " + secondPath + " -ID 5 6 7 4 2"); 

Я также попытался следующий фрагмент кода:

int exitCode; 
ProcessStartInfo processInfo; 
Process process; 

processInfo = new ProcessStartInfo("cmd.exe", command); 
processInfo.CreateNoWindow = true; 
processInfo.UseShellExecute = false; 
// *** Redirect the output *** 
processInfo.RedirectStandardError = true; 
processInfo.RedirectStandardOutput = true; 

//processInfo.Arguments 
process = Process.Start(processInfo); 
process.WaitForExit(); 

// *** Read the streams *** 
// Warning: This approach can lead to deadlocks, see Edit #2 
string output = process.StandardOutput.ReadToEnd(); 
string error = process.StandardError.ReadToEnd(); 

exitCode = process.ExitCode; 

Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output)); 
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error)); 
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand"); 
process.Close(); 

Это еще не похоже на работу! Буду признателен за любую оказанную помощь.

********* ********* FINAL EDIT

Это строка, которая отправляется в качестве команды:

""C:\\Program Files\\DEEM\\DEEM.exe" -ENV "C:\\Program Files\\DEEM\\Environments\\IT" -ID 01004698001001 00285209090217 00285209090250 00285209090382 99041250643762" 

что приводит к следующее сообщение об ошибке:

"'C:\Program' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"

Все, что мне нужно, чтобы заставить его работать, чтобы вынуть первую и последнюю цитату, которые обернуты в связи с командой, являющейся строкой. Я не уверен, как вывести котировки.

+2

Когда вы запускаете i вручную, вы записываете -ENV, при программном программировании вы пишете -CMV. Может ли это быть чем-то? – iikkoo

+1

@iikkoo Ваше внимание впечатляет, но это была ошибка с моей стороны, написав это, в настоящее время работает как одна и та же переменная! Извините, я отредактировал ошибку – Baraa

+0

IIRC, вам нужно «cmd.exe/c ...» –

ответ

1

Ваш первый пример работает, если вы ждете процесса выхода:

static void Main(string[] args) 
    { 
     string firstPath = @"""C:\Program Files\APP\APP.exe"""; 
     string secondPath = @"""C:\Program Files\APP\Second\IT"""; 
     string command = firstPath + " -CMV " + secondPath + " -ID 5 6 7 4 2"; 

     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = firstPath; //"cmd.exe"; 
     startInfo.Arguments = command; 
     process.StartInfo = startInfo; 
     process.Start(); 

     // **** don't forget to wait for the process to exit *** 
     process.WaitForExit(); 

     var code = process.ExitCode; 
     var time = process.ExitTime; 
    } 

В вашем втором примере вы сделали использование WaitForExit(), но есть некоторые другие вещи сломаны я не исследовал на.

+0

Хмм, я попытался подождать, но он все еще не сработал: (... Я редактировал главный вопрос с окончательным изменением, в котором, по моему мнению, возникает проблема, из-за которой команда не запускается. Мне нужно избавиться от первая и последняя цитата, созданные из-за того, что строка является строкой ... – Baraa