Так что это мой код:Невозможно получить CMD выход
private void CheckLastLogon(string computername)
{
string cmd = $"/C query user /server:{computername}";
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
}
output
всегда string.Empty
и я не получил никакого понятия, почему ... (Это работает в CMD
).
Возможно, причина в /c
в моей команде? заканчивается ли он быстро?
Где моя ошибка?
UPDATE 1: После перенаправлять ErrorOutput
я получил некоторую дополнительную информацию.
Я добавил ErrorOutputand это говорит Команда «запрос» не найден
Так что проблема с моей командой?
Здесь вы видите, что он работает в ЦМД:
Update 2: Если удалить /c
из моей команды это не делает ничего. Если я нарушу отладчик он ждет на proc.StandardOutput.ReadToEnd();
Некоторое время спустя я получаю ContextSwitchDeadlock
...
Что так ужасно неправильно об этом?
Что делать, если вы удалите '/ C' тогда? – nozzleman
, то он не будет прерван каким-то образом ... –
попробуйте имя файла 'C: \ Windows \ System32 \ query.exe' Args' user/server: {computername} ', оставьте остальные как – nozzleman