Member 14149393 Ответов: 1

Не получая вывода процесса (sfc.exe /VERIFYONLY). Process.standardoutput.readtoend дает выход с /n/0/n включенным в различных местах


Процесс p = новый процесс();
п. Информацию.WindowStyle = ProcessWindowStyle.Обычный;
п. Информацию.CreateNoWindow = false;
п. Информацию.Значение свойства useshellexecute = false в;
п. Информацию.Имя файла = "sfc.exe";
п. Информацию.Аргументы = " /VERIFYONLY";
п. Информацию.RedirectStandardOutput = true в;
п. Информацию.RedirectStandardError = истина;
п. Начать();
строка ошибка = Р.StandardError.ReadToEnd();
выходная строка = стр. StandardOutput.ReadToEnd();

Что я уже пробовал:

Я попытался получить выход из sfc.exe /verifyonly и связать это с моим текстовым полем.
Но я получаю вывод как null. И какой-то текст идет как "\n\0\n\0\n\0M\0i\0c\0r\0o\0s\0o\0f\0t\0 \0(\0R\0)\0 \0W\"
это выход rela с добавлением \n,\0 и пробелов.
Не удалось увидеть это и в TextVisualizer.

ZurdoDev

Значит, иногда вы все-таки получаете данные?

Я не совсем понимаю.

Richard MacCutchan

Скорее всего, потому, что sfc требует прав администратора для запуска.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Во-первых, для запуска SFC требуются права администратора, поэтому, если вы не запускаете свой код от имени администратора, SFC тоже не будет работать.

Далее необходимо выполнить команду sfc с призывом .Начните, но затем уже на следующей линии вы звоните .ReadToEnd, который не ждет завершения запущенного вами процесса! .ReadToEnd вернет только то, что было записано в поток в то время. Если приложение ничего не записывало на консоль, ReadToEnd вернет только то, что было записано до этого момента. ReadToEnd не ждет завершения запущенного вами процесса, прежде чем вернуть содержимое потока.