Задайте переменную среды программно в области действия машины и отправьте сообщение 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
сделаю это для вас.