#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 не является внутренней или внешней командой». Я не обнаружил никаких ошибок в своем коде. Он просто не может воспроизвести мою команду.