Есть ли API для получения исходных значений переменных, определенных в ОС?

В свойствах системы Windows | Переменные среды, есть переменная "AppStatus=status1".

Существует исполняемый файл с именем MyApp.exe. В реализации он изменяет переменную с кодом.

int ret = putenv("AppStatus=status2"); // Change the environment variable.

Если используется API char * pStatus = getenv("AppStatus");, возвращаемое значение равно "status2".

Я хочу получить исходное значение, определенное в ОС ("AppStatus=status1"), а не в блоке процесса. Чтобы реализовать это, я могу запросить ключ реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path.

Но лучше, если есть API, который его поддерживает. Кто-нибудь знает об этом?


person Jeffrey    schedule 30.12.2011    source источник
comment
Вы должны пометить свой вопрос WinAPI (или Windows), а ответ зависит от операционной системы (и на самом деле ваш вопрос, вероятно, не имеет смысла в Linux). Ваш вопрос больше связан с Windows, чем с C++.   -  person Basile Starynkevitch    schedule 30.12.2011
comment
Можно ли изменить реализацию? Почему бы просто не сохранить значение AppStatus при запуске процесса отдельно?   -  person vstm    schedule 30.12.2011
comment
Интересная информация здесь (не дублирование, а указатели на функции Win32 и различия между getenv и собственный эквивалент Win32 и функция .Net, которая делает то, что вы хотите, если бы вы использовали .Net)   -  person Mat    schedule 30.12.2011


Ответы (1)


Просто позвоните GetEnvironmentVariable(). Он работает с состоянием процесса, поддерживаемым Windows, а не с состоянием CRT, измененным putenv().

person MSalters    schedule 30.12.2011
comment
Я пробовал этот API. Он возвращает то же значение, что и getenv. Это статус2. Из msdn здесь msdn.microsoft.com/en-us /библиотека/ms683188%28VS.85%29.aspx. Он извлекает содержимое указанной переменной из блока среды вызывающего процесса. - person Jeffrey; 30.12.2011
comment
Вы случайно не связываетесь с /MD? Кажется, CRT-зависимый. - person MSalters; 30.12.2011