using System; using Microsoft.Win32; namespace ScreenConnect; public class TemporaryRegistryModification : IDisposable { private RegistryKey key; private string name; private object oldValue; public TemporaryRegistryModification(RegistryKey key, string name, object value, RegistryValueKind? type = null) { this.key = key.AssertArgumentNonNull("key"); this.name = name.AssertArgumentNonNull("name"); oldValue = this.key.GetValue(name); if (value == null) { this.key.DeleteValue(this.name, throwOnMissingValue: false); } else if (type.HasValue) { this.key.SetValue(this.name, value, type.Value); } else { this.key.SetValue(this.name, value); } this.key.Flush(); } public void Dispose() { if (oldValue == null) { key.DeleteValue(name, throwOnMissingValue: false); } else { key.SetValue(name, oldValue); } key.Flush(); key.Close(); } }