2016-11-29 4 views
0

Из-за старого question расширено много, без рабочих ответов (но полезно), я бы хотел его переделать. Дело в том, что cmd работает хорошо, но не C#. Если общий ресурс существует, вывод сетевого использования в C# верен: «Команда завершена» (в моем случае на испанском языке). Но когда общий ресурс не существует, echo «false» работает в cmd, но не в C#, поэтому я не могу различить метод, который произошел (пользовательская привилегия или ресурс не найден). В C# я пробовал:Класс процесса непечатаемый эхо-выход C#

String cmd = "....else (echo "+false+")"; 
String cmd = "....else (echo false)"; 
String cmd = "....else (echo 'false')"; 

Никто не работает. метод (модифицированный из старого вопроса):

void mapDrive(String driveChar, string server, string user, string password) 
{ 

    try 
    { 

     String output; 

     String cmd = "if exist " + server + " (net use " + driveChar + ": " + server + " /user:" + user + " " + password + ") else (echo false)"; 
     ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd", "/c" + cmd); 
     processStartInfo.RedirectStandardOutput = true; 
     processStartInfo.RedirectStandardError = true; 
     processStartInfo.UseShellExecute = false; 
     processStartInfo.CreateNoWindow = true; 

     Process proc = new Process(); 
     proc.StartInfo = processStartInfo; 
     proc.Start(); 
     proc.WaitForExit(2000); 
     proc.Close(); 

     StreamReader streamReader = proc.StandardOutput; 
     output = streamReader.ReadToEnd(); 
     Debug.WriteLine("CMD OUTPUT: " + output); 

     if (output.Equals("false")) 
     { 
      MessageBox.Show("Error: couldn't found requested resource"); 
     } 

    } 
    catch (Exception e) 
    { 
     MessageBox.Show("Error: you have no privileges"); 
    } 
} 
+0

Что содержит 'output'? –

+0

вывод команды, которую я выполняю, если ** использование сети ** успешно выполнено: «Команда завершена», если она не должна быть ** ложной **, но никогда не печатает ** false ** :( – tomyforever

+0

Вы закрываете процесс прежде чем пытаться читать из stdout. Вы должны использовать инструкции 'using'. Если вы измените обработчик исключений на печать' e.Message', вы бы это заметили. Это хороший пример того, почему проблема с обработкой исключений исключений может быть проблемой. –

ответ

1

У вас есть две проблемы в вашем коде. Прежде всего, вы закрываете процесс перед чтением вывода, поэтому переместите свой proc.Close() в конец метода. Другая проблема заключается в том, что вывод будет содержать новую строку, поэтому измените значение if (output.Equals("false")) на if (output.Contains("false"))

+0

Omg, наконец. Thx. – tomyforever

+0

De nada @tomyforever :) – Pikoh