/// <summary>
        /// Recupera um valor do registro baseado na chave
        /// </summary>
        /// <param name="keyPath">Caminho base</param>
        /// <param name="chave">chave usada para localizar o valor</param>
        /// <param name="valorPadrao">Valor que deve ser usado caso não obtenha resultado, caso nulo retorna Exception</param>
        /// <returns>Retorna o objeto referente a chave, caso não encontre volta uma string vazia</returns>
        public static string RecuperaValor(string keyPath, string chave, string valorPadrao)
        {
            try
            {
                if (string.IsNullOrEmpty(keyPath))
                {
                    throw new ArgumentNullException("keyPath", "O parâmetro  chave não pode ser nulo");
                }

                if (string.IsNullOrEmpty(chave))
                {
                    throw new ArgumentNullException("chave", "O parâmetro  chave não pode ser nulo");
                }

                var perm1 = new RegistryPermission(RegistryPermissionAccess.Read, Key);


                return perm1.CanReadKey(Key)
                    ? Microsoft.Win32.Registry.GetValue(keyPath, chave, "").ToString()
                    : valorPadrao;
            }
            catch (Exception)
            {
                if (valorPadrao == null)
                {
                    throw;
                }
                return valorPadrao;
            }
        }