Я недавно столкнулся с чем-то подобным, и передача сообщения - это правильный путь, как объяснено в этом кб (и парапурой):
http://support.microsoft.com/kb/104011
однако я бы предложил_T () вокруг «Environment» (или, возможно, «L»), чтобы убедиться, что вы передаете правильную строку (ansi или wide).как это:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) _T("Environment"), SMTO_ABORTIFHUNG,
5000, &dwReturnValue);
я использовал выше в приложении командной строки.без _T () отправка сообщения будет успешной, но моя система, похоже, никогда не получит обновление переменной среды.
Кстати, командная строка 'setx', вероятно, использует тот же механизм для обновления переменных среды.Кроме того, я использую это в ATL DLL.