zmienne środowiskowe w systemie windows
Ostatnio zmodyfikowano 2019-03-17 18:03
madpl1239 Temat założony przez niniejszego użytkownika |
zmienne środowiskowe w systemie windows » 2019-03-17 15:50:43 Witam serdecznie. Nurtuje mnie pewien problem. Robię program, który będzie mógł odczytać ale również i utworzyć wybraną zmienną środowiskową ( lub utworzyć nową zmienną ). Korzystam z MinGW. Wiem, że trzeci argument funkcji main można wykorzystać do odczytu zmiennych środowiskowych. Ale ja chcę mieć możliwość zmiany wartości danej zmiennej środowiskowej:))) próbowałem getenv(), putenv(), które można znaleźć w standardowych nagłówkach kompilatora, ale... Efektu brak. Najlepiej jak przedstawię kod źródłowy: frywolną implementację wersji POSIX setenv() i oczywiście main #include <iostream> #include <stdlib.h> #include <stdio.h>
#define _ERRCODE 101
int setenv( const char * name, const char * value, int overwrite ) { char * code = NULL; if( !overwrite ) { code = getenv( name ); if( overwrite |( code == NULL ) ) return _ERRCODE; } return putenv( name ); }
int main( int argc, char ** argv, char ** envp ) { char str_var[] = "my_var"; char str_value[] = "value"; int i = 0; if( setenv( str_var, str_value,( int ) 1 ) ) std::cout << "setenv() success." << std::endl; else std::cout << "setenv() failed." << std::endl; for(; * envp; envp++, i++ ) { std::cout << * envp << "\n"; } std::cout << "number of env = " << i << std::endl; }
Po uruchomieniu pętla for wylistowała mi wszystkie zmienne środowiskowe a potem ich liczbę zgodnie z kodem main:))) Ale "my_var" tam nie ma! I to jest mój problem. |
|
pekfos |
» 2019-03-17 15:58:22 envp zawiera stan zmiennych środowiskowych z momentu uruchomienia programu. |
|
madpl1239 Temat założony przez niniejszego użytkownika |
» 2019-03-17 16:10:16 To wiem:) W dokumentacji microsoftu znalazłem taki mniej więcej zapis: "... że envp jest talicą wskaźników do zmiennych środowiskowych..." i logicznie myśląc zdawałem sobie sprawę, aby zobaczyć wynik działania mojego kodu muszę właśnie w kodzie umieścić wylistowanie zmiennych środowiskowych. Ale nic to nie dało.
Wychodzi na to, że envp nie jest modyfikowana przez putenv()?
Ale dalej główny problem nie jest rozwiązany stąd mój post na tym zacnym forum:))
|
|
pekfos |
» 2019-03-17 18:03:17 Wychodzi na to, że envp nie jest modyfikowana przez putenv()? |
envp zawiera stan zmiennych środowiskowych z momentu uruchomienia programu. |
Więc nie po operacjach wykonywanych w programie. Ale dalej główny problem nie jest rozwiązany |
A co dokładnie chcesz osiągnąć? Jak chcesz zmienić napisy pod envp to sobie je skopiuj i modyfikuj do woli. Jak chcesz ustawić zmienną środowiskową na poziomie systemu, to nie tędy droga. https://docs.microsoft.com/en-us/windows/desktop/ProcThread/environment-variablesCalling SetEnvironmentVariable has no effect on the system environment variables. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message with lParam set to the string "Environment". This allows applications, such as the shell, to pick up your updates. |
|
|
« 1 » |