Процесс.Start() полностью игнорирует переменные среды в PATH

#c#

#c#

Вопрос:

Я обнаружил, что мое окно cmd вызывается процессом.Start() полностью игнорирует мои переменные среды в ПУТИ. В нем всегда говорилось, что «xxx-это не внутренние или внешние команды». Я попытался запустить его вручную, и это сработало. Поэтому я уверен, что ПУТЬ был задан правильно.

Я также попытался явно добавить переменную. Это все равно не сработало. Это мой код:

 public static string ExecuteCommandSync(string command) {  try  {  System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("C:\Windows\System32\cmd.exe", "/K "   command);   var length = command.Length;   procStartInfo.RedirectStandardOutput = false;  procStartInfo.UseShellExecute = false;  //Does not work  procStartInfo.EnvironmentVariables.Add("PATH", "C:\Program Files\Arm\Arm Mobile Studio 2021.0");  procStartInfo.CreateNoWindow = false;  System.Diagnostics.Process proc = new System.Diagnostics.Process();  proc.StartInfo = procStartInfo;  proc.Start();  }  catch (Exception objException)  {  return objException.ToString();  } }  

Комментарии:

1. В чем заключается ценность command ?

2. ПУТЬ обычно определяется как системная и пользовательская переменная среды. Очевидная проблема заключается в том, что этот код выполняется не под той же учетной записью пользователя, что и тот, который вы используете для проверки вручную, — детали, отсутствующей в вашем вопросе.

3. Команда «malioc —версия». Я не понимаю, как я могу использовать другую учетную запись пользователя для запуска кода. Разве он автоматически не запускает мой код в моей текущей учетной записи?

4. Сначала вам нужно убедиться, что среда процесса, который вы пытаетесь запустить, имеет правильный ПУТЬ (я вижу, что вы начинаете CMD /K , это кажется нормальным в качестве первого шага при отладке этой проблемы). После этого вам нужно проверить, где находится исполняемый malioc файл (ожидается, что он будет в текущем каталоге или в каталоге, указанном вами в ПУТИ.

Ответ №1:

Лучше, если вы добавите полное описание ошибки вместо «не работает».

Система.Исключение аргумента: Значение не попадает в ожидаемый диапазон. в Системе.Коллекции.Специализированный.StringDictionaryWrapper.Добавьте(строковый ключ, строковое значение) в ConsoleApp88.Program.ExecuteCommandSync(строковая команда) в

Вы не можете добавить PATH , потому что он уже есть в списке переменных среды.

Решением может быть добавление следующего оператора непосредственно перед добавлением:

 procStartInfo.EnvironmentVariables.Remove("PATH");  

Комментарии:

1. Ошибка «malioc is не является внутренней или внешней командой». Я не обнаружил никаких ошибок в своем коде. Он просто не может воспроизвести мою команду.