У меня есть настраиваемое действие установщика, которое обновляет среду PATH и создает дополнительную переменную среды. Добавление каталога к существующей переменной пути работает нормально, но по какой-то причине мои попытки создать новую переменную среды оказались безуспешными. Я использую следующий код:
using (RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", true))
{
reg.SetValue("MYVAR", "SomeVal", RegistryValueKind.ExpandString);
}
Обновлено: ОС - 32-разрядная XP, и, насколько я могу судить, она тихо терпит неудачу.





Что это за ОС? Это на 64-битной системе? Какова природа сбоя: молчит или создается исключение?
Вы можете попробовать запустить ProcessMonitor и посмотреть, видит ли он попытку установить значение.
Есть ли причина, по которой это нужно делать через реестр?
В противном случае вы можете использовать Environment.SetEnvironmentVariable (), начиная с .NET 2.0. Это позволяет вам устанавливать на основе машины, процесса или пользователя.
Оказывается, была еще одна проблема, которая не позволяла вызвать код в моем вопросе. Однако я использовал сборку Win32, потому что пример кода, за которым я следил, был написан до того, как сборка Environment стала доступной. Итак, спасибо, Питер, за указание на Environment API.
Почему вы используете для этого CustomAction? Установщик Windows поддерживает обновление переменных среды изначально.