Вы, кажется, перевели пакетный скрипт, который проверяет специальную переменную ERRORLEVEL вместо более знакомой для кода выхода сценариев unix.
ERRORLEVEL - специальная переменная, которая соответствует ExitCode процесса.
Что ваш код попытка сделать, это прочитать переменную окружения из собственного процесса, как это было установлено дочерним процессом.
В этом случае пакетных скриптов, которые, как представляется, делают это, они фактически полагаются на среду сценариев операционной системы, чтобы изменить эту специальную переменную для вас, когда процесс laucnhed завершается. Это проблема при попытке повторить аналогичную функциональность в более полной функциональной среде программирования (почему это было бы плохой идеей из C#, подумайте, что произойдет, если два потока одновременно запускают два процесса).
Вместо этого есть приличная API для взаимодействия с дочерним процессом, идиоматический эквивалент следующее:
using (Process process = new Process())
{
process.StartInfo = startInfo;
process.Start();
// only if you need the output for debugging
//string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return process.ExitCode;
}
Примечания здесь (как и с другим ответом), что вы должны сначала дождаться окончание процесса, чтобы выйти прежде чем вы сможете посмотреть код выхода.
Почему это было приостановлено? Это тот же ответ, что и мой, хотя я считаю, что первая часть - непонимание вопроса? –
Я объяснял * почему * его попытка прочитать ERRORLEVEL (даже если это была «нормальная» переменная среды) была обречена на провал (наряду с не ожиданием выхода). Очевидно, кто-то подумал, что я не знал об этом или думал, что я не могу объяснить это достаточно четко. Я передумаю, чтобы сделать его более ясным. – ShuggyCoUk
Вы абсолютно правы, я смотрел пакетный скрипт. Большое спасибо, и я поддержал ответ, потому что это было очень полезно для меня. – Colin