Задайте переменную среды программно в области действия машины и отправьте сообщение SettingsChange

У меня есть код, который устанавливает переменные окружения в области MACHINE, USER и PROCESS.

Пользователь и процесс работают так, как ожидалось, но по какой-то причине, когда я пытаюсь проверить переменную области действия машины, она не найдена.

Мой код для установки переменных среды довольно прост:

Environment.SetEnvironmentVariable("foo1", "bar1", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("foo2", "bar2",   EnvironmentVariableTarget.User);
Environment.SetEnvironmentVariable("foo3", "bar3", EnvironmentVariableTarget.Process);

Я что-то пропустил?

ОБНОВИТЬ

Я пытаюсь решить проблему, используя то, что было указано при отправке WM_SETTINGCHANGE сообщение. Мне любопытно, позволит ли добавление в этом SetEnvironmentVariable работать, или если единственный способ сделать это через реестр.

Я собираюсь попробовать оба и посмотреть, что работает, и пока я одержим передачей сообщения. Из того, что я могу сказать, это синтаксис, необходимый для трансляции сообщения

IntPtr HWND_BROADCAST = new IntPtr(0xFFFF);
const int WM_SETTINGCHANGE = 0x001A;
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, null, "Environment");

Для этого я использую следующий импорт DLL.

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, String lParam);

1 ответ

Решение

Задать переменную среды на уровне машины немного сложно. Проблема в том, что это не оказывает немедленного влияния на процессы, так как они уже работают в своей среде. Смотрите больше там: https://serverfault.com/questions/8855/how-do-you-add-a-windows-environment-variable-without-rebooting Я не уверен, что Environment.SetEnvironmentVariable сделаю это для вас.

Другие вопросы по тегам