Как я могу вызвать Environment.GetEnvironmentVariable без потери %PathVariableName%, например %SystemRoot%

Благодаря таким сообщениям, как это и это, я могу получить переменную env PATH и изменить это как мне угодно.

Однако, как только я вызываю System.Environment.GetEnvironmentVariable(name, scope), возвращаемая строка больше не имеет переменной PATH с %PathVariableName% (например, %SystemDrive%).

Вместо ожидаемого %SystemDrive%\folder я получаю C:\folder.

Хотя он работает так, как задумано, я предпочитаю сохранять переменные, если могу.

Есть ли способ сохранить это имя переменной пути, когда я вызываю GetEnvironmentVariable?


person ShinT    schedule 07.05.2021    source источник
comment
stackoverflow.com/a/9845159/920069   -  person Retired Ninja    schedule 08.05.2021
comment
Большое спасибо за ответ! Я обсуждаю, должен ли я закрыть свой вопрос, поскольку он задает конкретный вопрос поверх простого изменения переменной среды. Я отвечу на свой вопрос и позволю сообществу решить, уместно ли это.   -  person ShinT    schedule 08.05.2021


Ответы (1)


Благодаря @RetiredNinja ответ был найден в здесь ответил Натан Бедфорд.

В основном путь доступен в реестре, поэтому извлечение строки оттуда позволит мне сохранить переменную пути.

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
person ShinT    schedule 07.05.2021