Zmienne środowiskowe udają zmodyfikowane

0

Załóżmy, że mamy sobie w systemie Windows XP/7 jakąś zmienną środowiskową FILES ustawioną na 250. Teraz chcemy ją zmienić za pomocą poniższego kodu:

    ShowMessage(GetEnvironmentVariable('FILES'));
    if SetEnvironmentVariable(PChar('FILES'),PChar('205')) then ShowMessage(GetEnvironmentVariable('FILES'));

Wszystko skompilowało się prawidłowo, program najpierw wyświetlił dotychczasową wartość zmiennej czyli 250, a następnie wartość 205 co teoretycznie powinno oznaczać że wartość została zmieniona ponownie, jednak po sprawdzeniu wartości zmniennej zewnętrznie (np. we właściwościach systemu albo komendą set w cmd.exe) wartość nadal wynosi 250. Dlaczego nie udało się zmienić wartości tej zmiennej i dlaczego program mimo to odczytywał tą nową wartość?

1
Thunderlane napisał(a)

[...] jednak po sprawdzeniu wartości zmniennej zewnętrznie (np. we właściwościach systemu albo komendą set w cmd.exe) wartość nadal wynosi 250.

SetEnvironmentVariable - pierwsza linijka opisu wszystko tłumaczy:

Sets the contents of the specified environment variable for the current process.

0

A czy jest w ogóle w Delphi jakakolwiek możliwość zmienić trwale wartość takiej zm. środowiskowej? Bo czasem np. jakiś program musi w systemie ustawić na stałe jakąś wartość podaną przez użytkownika, a wszystkie poradniki opisują tylko jak to zmienić na czas działania programu. Zwykła edycja autoexec.nt czy config.nt też nie ma wpływu.

0

Może po prostu wywołać to - co siedzi w zmiennej COMSPEC, z parametrem /C set i tak dalej. Może to poskutkuje. Chociaż jak to z set jest to też nie mam do końca pojęcia. Bo być może trzeba dodawać to w ustawieniach zaawansowanych systemu operacyjnego. I będzie niestety odświeżało się dopiero po restarcie.

2

Spróbuj tego:

Calling 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.

http://msdn.microsoft.com/en-us/library/ms682653%28v=vs.85%29.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1