Изменения в реестре вступают в силу немедленно, однако многие приложения (и некоторые компоненты операционной системы) читают параметры реестра только при первом запуске, поэтому изменения в реестре не будут иметь никакого эффекта, пока приложение / компьютер не будет перезапущен.
Если вы несете ответственность за обслуживание приложения, использующего параметры реестра, и хотите, чтобы ваше приложение незамедлительно реагировало на изменения реестра без необходимости перезапуска, вы можете использовать WMI для получения уведомлений при изменении реестра. См. Registry Watcher C #
Если вы пытаетесь обновить раздел реестра для другого приложения (или компонента операционной системы) и хотите, чтобы изменения вступили в силу немедленно, это относится к конкретному приложению - имейте в виду, что, вероятно, не вся нагрузка, которая вы можете сделать это, если это уже не поддерживается этим приложением, или вы можете убедить разработчиков приложения изменить приложение для вас.
Обновление: Если вы пытаетесь обновить настройки ОС, такие как обои, то реестр обычно не туда подходит! Помимо проблем, с которыми вы сейчас сталкиваетесь, вы, вероятно, обнаружите, что разделы реестра изменятся в будущих версиях Windows, что приведет к поломке вашего приложения.
Вместо этого вы должны использовать определенные API-интерфейсы Windows для выполнения подобных операций, например, Функция SystemParametersInfo может использоваться для обновления обоев, см. Обои в c # :
Для установки обоев вы можете использовать SystemParametersInfo для программной установки изображения обоев. Это работает только для растрового изображения, поэтому, если вы хотите установить другой формат изображения, вы должны сначала преобразовать его в растровое изображение.
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);
private static UInt32 SPI_SETDESKWALLPAPER = 20;
private static UInt32 SPIF_UPDATEINIFILE = 0x1;
private String imageFileName = "c:\\sample.bmp";
public void SetImage( string filename )
{
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, filename, SPIF_UPDATEINIFILE);
}