Вы, похоже, перевели пакетный скрипт, который проверяет специальную переменную ERRORLEVEL вместо или более знакомый код завершения сценариев Unix.
ERRORLEVEL - это специальная переменная, которая соответствует ExitCode процесса.
Что ваш код пытается сделать, это прочитать переменную окружения из своего собственного процесса, как это было задано дочерним процессом.
В этом случае пакетные сценарии, которые, по-видимому, делают это, на самом деле полагаются на среду сценариев операционной системы, чтобы изменить эту специальную переменную для вас при выходе из процесса запуска.
Это проблематично при попытке реплицировать аналогичную функциональность в более полнофункциональной среде программирования (поэтому 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;
}
Обратите внимание: здесь (как и в случае с другим ответом) вы должны сначала дождаться завершения процесса, прежде чем сможете посмотреть код выхода.