/// <summary> /// Writes a value to the Windows registryKey. /// </summary> /// <typeparam name="T">The type of value that is written (<see cref="RegistryReadValueCommand{T}"/>).</typeparam> /// <param name="command">The command to execute.</param> /// <param name="logger">The logger to use.</param> /// <returns>A response indicating success and the written value, or failure with error details.</returns> public IServiceCommandResponse ExecuteWrite <T>(RegistryWriteValueCommand <T> command, ILogger logger) { Param.VerifyNotNull(command, nameof(command)); Param.VerifyNotNull(logger, nameof(logger)); IServiceCommandResponse response; try { var registryHive = (RegistryHive)Enum.Parse(typeof(RegistryHive), command.BaseKey.ToString()); using (IWin32RegistryKey baseKey = _registry.OpenBaseKey(registryHive, RegistryView.Registry64)) using (IWin32RegistryKey subKey = baseKey.CreateSubKey(command.Key, writable: true)) { subKey.SetValue(command.ValueName, command.Value, TypeToRegistryValueKind(typeof(T))); response = ServiceCommandResponse.Create(command.CommandName, command.Value); } } catch (Exception e) { response = ServiceCommandResponse.CreateError( command.CommandName, ServiceErrorInfo.RegistryWriteError( RegistryPath.HiveToWin32Name(RegistryPath.BaseKeyToHive(command.BaseKey)), command.Key, command.ValueName, e)); logger.LogError(response.ErrorMessage); } return(response); }
//// =========================================================================================================== //// Methods //// =========================================================================================================== /// <summary> /// Reads a value from the Windows registryKey. /// </summary> /// <typeparam name="T">The type of value that is read (<see cref="RegistryReadValueCommand{T}"/>).</typeparam> /// <param name="command">The command to execute.</param> /// <param name="logger">The logger to use.</param> /// <returns>A response indicating success and the read value, or failure with error details.</returns> public IServiceCommandResponse ExecuteRead <T>(RegistryReadValueCommand <T> command, ILogger logger) { Param.VerifyNotNull(command, nameof(command)); Param.VerifyNotNull(logger, nameof(logger)); ServiceCommandResponse response; try { var registryHive = (RegistryHive)Enum.Parse(typeof(RegistryHive), command.BaseKey.ToString()); using (IWin32RegistryKey baseKey = _registry.OpenBaseKey(registryHive, RegistryView.Registry64)) using (IWin32RegistryKey subKey = baseKey.OpenSubKey(command.Key, writable: false)) { object value = subKey?.GetValue(command.ValueName, command.DefaultValue) ?? command.DefaultValue; response = ServiceCommandResponse.Create(command.CommandName, value); } } catch (Exception e) { response = ServiceCommandResponse.CreateError( command.CommandName, ServiceErrorInfo.RegistryReadError( RegistryPath.HiveToWin32Name(RegistryPath.BaseKeyToHive(command.BaseKey)), command.Key, command.ValueName, e)); logger.LogError(response.ErrorMessage); } return(response); }