RegistryKey Classe

Definição

Representa um nó ao nível da chave no registo do Windows. Esta classe é um encapsulamento de registo.

public ref class RegistryKey sealed : MarshalByRefObject, IDisposable
public sealed class RegistryKey : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RegistryKey : MarshalByRefObject, IDisposable
type RegistryKey = class
    inherit MarshalByRefObject
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type RegistryKey = class
    inherit MarshalByRefObject
    interface IDisposable
Public NotInheritable Class RegistryKey
Inherits MarshalByRefObject
Implements IDisposable
Herança
Atributos
Implementações

Exemplos

O exemplo de código seguinte mostra como criar uma subchave sob HKEY_CURRENT_USER, manipular o seu conteúdo e depois eliminar a subchave.

using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

int main()
{
   // Create a subkey named Test9999 under HKEY_CURRENT_USER.
   RegistryKey ^ test9999 = Registry::CurrentUser->CreateSubKey( "Test9999" );

   // Create two subkeys under HKEY_CURRENT_USER\Test9999.
   test9999->CreateSubKey( "TestName" )->Close();
   RegistryKey ^ testSettings = test9999->CreateSubKey( "TestSettings" );

   // Create data for the TestSettings subkey.
   testSettings->SetValue( "Language", "French" );
   testSettings->SetValue( "Level", "Intermediate" );
   testSettings->SetValue( "ID", 123 );
   testSettings->Close();

   // Print the information from the Test9999 subkey.
   Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
   array<String^>^subKeyNames = test9999->GetSubKeyNames();
   for ( int i = 0; i < subKeyNames->Length; i++ )
   {
      RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
      Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
      array<String^>^valueNames = tempKey->GetValueNames();
      for ( int j = 0; j < valueNames->Length; j++ )
      {
         Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

      }
   }
   
   // Delete the ID value.
   testSettings = test9999->OpenSubKey( "TestSettings", true );
   testSettings->DeleteValue( "id" );

   // Verify the deletion.
   Console::WriteLine( dynamic_cast<String^>(testSettings->GetValue(  "id", "ID not found." )) );
   testSettings->Close();

   // Delete or close the new subkey.
   Console::Write( "\nDelete newly created registry key? (Y/N) " );
   if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
   {
      Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
      Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
   }
   else
   {
      Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
      test9999->Close();
   }
}
using System;
using System.Security.Permissions;
using Microsoft.Win32;

class RegKey
{
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey test9999 =
            Registry.CurrentUser.CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        using(RegistryKey
            testName = test9999.CreateSubKey("TestName"),
            testSettings = test9999.CreateSubKey("TestSettings"))
        {
            // Create data for the TestSettings subkey.
            testSettings.SetValue("Language", "French");
            testSettings.SetValue("Level", "Intermediate");
            testSettings.SetValue("ID", 123);
        }

        // Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under {1}.",
            test9999.SubKeyCount.ToString(), test9999.Name);
        foreach(string subKeyName in test9999.GetSubKeyNames())
        {
            using(RegistryKey
                tempKey = test9999.OpenSubKey(subKeyName))
            {
                Console.WriteLine("\nThere are {0} values for {1}.",
                    tempKey.ValueCount.ToString(), tempKey.Name);
                foreach(string valueName in tempKey.GetValueNames())
                {
                    Console.WriteLine("{0,-8}: {1}", valueName,
                        tempKey.GetValue(valueName).ToString());
                }
            }
        }

        using(RegistryKey
            testSettings = test9999.OpenSubKey("TestSettings", true))
        {
            // Delete the ID value.
            testSettings.DeleteValue("id");

            // Verify the deletion.
            Console.WriteLine((string)testSettings.GetValue(
                "id", "ID not found."));
        }

        // Delete or close the new subkey.
        Console.Write("\nDelete newly created registry key? (Y/N) ");
        if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
        {
            Registry.CurrentUser.DeleteSubKeyTree("Test9999");
            Console.WriteLine("\nRegistry key {0} deleted.",
                test9999.Name);
        }
        else
        {
            Console.WriteLine("\nRegistry key {0} closed.",
                test9999.ToString());
            test9999.Close();
        }
    }
}
Imports System.Security.Permissions
Imports Microsoft.Win32

Public Class RegKey
    Shared Sub Main()

        ' Create a subkey named Test9999 under HKEY_CURRENT_USER.
        Dim test9999 As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("Test9999")

        ' Create two subkeys under HKEY_CURRENT_USER\Test9999.
        test9999.CreateSubKey("TestName").Close()
        Dim testSettings As RegistryKey = _
            test9999.CreateSubKey("TestSettings")

        ' Create data for the TestSettings subkey.
        testSettings.SetValue("Language", "French")
        testSettings.SetValue("Level", "Intermediate")
        testSettings.SetValue("ID", 123)
        testSettings.Close()

        ' Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under Test9999.", _
            test9999.SubKeyCount.ToString())
        For Each subKeyName As String In test9999.GetSubKeyNames()
            Dim tempKey As RegistryKey = _
                test9999.OpenSubKey(subKeyName)
            Console.WriteLine(vbCrLf & "There are {0} values for " & _
                "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
            For Each valueName As String In tempKey.GetValueNames()
                Console.WriteLine("{0,-8}: {1}", valueName, _
                    tempKey.GetValue(valueName).ToString())
            Next
        Next

        ' Delete the ID value.
        testSettings = test9999.OpenSubKey("TestSettings", True)
        testSettings.DeleteValue("id")

        ' Verify the deletion.
        Console.WriteLine(CType(testSettings.GetValue( _
            "id", "ID not found."), String))
        testSettings.Close()

        ' Delete or close the new subkey.
        Console.Write(vbCrLf & "Delete newly created " & _
            "registry key? (Y/N) ")
        If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
            Registry.CurrentUser.DeleteSubKeyTree("Test9999")
            Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
                test9999.Name)
        Else
            Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
                test9999.ToString())
            test9999.Close()
        End If
   
    End Sub
End Class

Observações

Para obter uma instância de RegistryKey, use um dos membros estáticos da Registry classe.

O registo atua como um repositório central de informação para o sistema operativo e as aplicações num computador. O registo está organizado num formato hierárquico, baseado numa ordenação lógica dos elementos armazenados nele (consulte Registry os itens de nível base nesta hierarquia). Ao armazenar informação no registo, selecione o local apropriado com base no tipo de informação armazenada. Certifique-se de evitar destruir a informação criada por outras aplicações, pois isso pode causar comportamentos inesperados e também ter um efeito negativo na sua própria aplicação.

Importante

Este tipo implementa a interface IDisposable. Quando terminar de usar o tipo, você deve eliminá-lo direta ou indiretamente. Para descartar o tipo diretamente, chame seu método Dispose em um bloco try/catch. Para descartá-lo indiretamente, use uma construção de linguagem como using (em C#) ou Using (em Visual Basic). Para obter mais informações, consulte a seção "Usando um objeto que implementa IDisposable" no tópico da IDisposable interface.

As chaves do registo são a unidade base de organização no registo e podem ser comparadas com pastas no Explorador de Ficheiros. Uma determinada chave pode ter subchaves, tal como uma pasta pode ter subpastas. Cada chave pode ser eliminada, desde que o utilizador tenha as permissões adequadas para tal, e a chave não seja uma chave base ou esteja ao nível diretamente abaixo das chaves base. Cada chave pode também ter múltiplos valores associados (um valor pode ser comparado a um ficheiro), que são usados para armazenar a informação – por exemplo, informação sobre uma aplicação instalada no computador. Cada valor contém uma informação específica, que pode ser recuperada ou atualizada quando necessário. Por exemplo, pode criar uma RegistryKey para a sua empresa, sob a tecla HKEY_LOCAL_MACHINE\Software, e depois uma subchave para cada aplicação que a sua empresa criar. Cada subchave contém a informação específica dessa aplicação, como definições de cor, localização e tamanho do ecrã, ou extensões de ficheiro reconhecidas.

Note que a informação armazenada no registo está disponível para outras aplicações e utilizadores, e por isso não deve ser usada para armazenar dados de segurança ou informações críticas de aplicação.

Atenção

Não exponha RegistryKey objetos de forma a que um programa malicioso possa criar milhares de subchaves sem significado ou pares chave/valor. Por exemplo, não permita que os chamadores introduzam chaves ou valores arbitrários.

A partir do .NET Framework 4, o comprimento de uma chave de registo já não está limitado a 255 caracteres.

Propriedades

Name Description
Handle

Obtém um SafeRegistryHandle objeto que representa a chave de registo que o objeto atual RegistryKey encapsula.

Name

Recupera o nome da chave.

SubKeyCount

Recupera a contagem de subchaves da chave atual.

ValueCount

Recupera a contagem de valores na chave.

View

Obtém a vista que foi usada para criar a chave do registo.

Métodos

Name Description
Close()

Fecha a chave e despeja-a no disco se o seu conteúdo tiver sido modificado.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateSubKey(String, Boolean, RegistryOptions)

Cria uma nova subchave ou abre uma subchave existente com o acesso especificado. Disponível a partir do .NET Framework 4.6.

CreateSubKey(String, Boolean)

Cria uma nova subchave ou abre uma subchave existente com o acesso especificado. Disponível a partir do .NET Framework 4.6.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

Cria uma subchave ou abre uma subchave para acesso de escrita, usando a opção de verificação de permissões especificada, a opção de registo e a segurança do registo.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions)

Cria uma subchave ou abre uma subchave para acesso por escrita, usando as opções especificadas de verificação de permissões e registo.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity)

Cria uma nova subchave ou abre uma subchave existente para acesso de escrita, usando a opção especificada de verificação de permissões e segurança do registo.

CreateSubKey(String, RegistryKeyPermissionCheck)

Cria uma nova subchave ou abre uma subchave existente para acesso por escrita, usando a opção de verificação de permissão especificada.

CreateSubKey(String)

Cria uma nova subchave ou abre uma subchave existente para acesso por escrita.

DeleteSubKey(String, Boolean)

Elimina a subchave especificada e especifica se uma exceção é levantada caso a subchave não seja encontrada.

DeleteSubKey(String)

Elimina a subchave especificada.

DeleteSubKeyTree(String, Boolean)

Elimina recursivamente a subchave especificada e quaisquer subchaves filhas, e especifica se existe uma exceção caso a subchave não seja encontrada.

DeleteSubKeyTree(String)

Apaga uma subchave e quaisquer subchaves filhas recursivamente.

DeleteValue(String, Boolean)

Elimina o valor especificado desta chave e especifica se uma exceção é levantada caso o valor não seja encontrado.

DeleteValue(String)

Elimina o valor especificado desta chave.

Dispose()

Liberta todos os recursos usados pela instância atual da RegistryKey classe.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Fecha a chave e despeja-a para o disco se o conteúdo tiver sido modificado.

Flush()

Grava todos os atributos da chave de registo aberto especificada no registo.

FromHandle(SafeRegistryHandle, RegistryView)

Cria uma chave de registo a partir de um handle especificado e de uma definição de visualização de registo.

FromHandle(SafeRegistryHandle)

Cria uma chave de registo a partir de um handle especificado.

GetAccessControl()

Devolve a segurança de controlo de acesso para a chave de registo atual.

GetAccessControl(AccessControlSections)

Devolve as secções especificadas da segurança de controlo de acesso para a chave de registo atual.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetSubKeyNames()

Recupera um array de cadeias que contém todos os nomes das subchaves.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetValue(String, Object, RegistryValueOptions)

Recupera o valor associado ao nome especificado e às opções de recuperação. Se o nome não for encontrado, devolve o valor padrão que fornece.

GetValue(String, Object)

Recupera o valor associado ao nome especificado. Se o nome não for encontrado, devolve o valor padrão que fornece.

GetValue(String)

Recupera o valor associado ao nome especificado. Retorna null se o par nome/valor não existir no registo.

GetValueKind(String)

Recupera o tipo de dados do registo do valor associado ao nome especificado.

GetValueNames()

Recupera um array de cadeias que contém todos os nomes de valores associados a esta chave.

InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
OpenBaseKey(RegistryHive, RegistryView)

Abre uma nova RegistryKey que representa a chave solicitada na máquina local com a vista especificada.

OpenRemoteBaseKey(RegistryHive, String, RegistryView)

Abre uma nova chave de registo que representa a chave solicitada numa máquina remota com a vista especificada.

OpenRemoteBaseKey(RegistryHive, String)

Abre uma nova RegistryKey que representa a chave solicitada numa máquina remota.

OpenSubKey(String, Boolean)

Recupera uma subchave especificada e especifica se o acesso de escrita deve ser aplicado à chave.

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights)

Recupera a subchave especificada para acesso de leitura ou leitura/escrita, solicitando os direitos de acesso especificados.

OpenSubKey(String, RegistryKeyPermissionCheck)

Recupera a subchave especificada para acesso de leitura ou leitura/escrita.

OpenSubKey(String, RegistryRights)

Recupera uma subchave com o nome e direitos de acesso especificados. Disponível a partir do .NET Framework 4.6.

OpenSubKey(String)

Recupera uma subchave como apenas leitura.

SetAccessControl(RegistrySecurity)

Aplica a segurança do controlo de acesso do Windows a uma chave de registo existente.

SetValue(String, Object, RegistryValueKind)

Define o valor de um par nome/valor na chave do registo, usando o tipo de dado de registo especificado.

SetValue(String, Object)

Define o par nome/valor especificado.

ToString()

Recupera uma representação em cadeia desta chave.

Implementações de Interface Explícita

Name Description
IDisposable.Dispose()

Esta API suporta a infraestrutura de produtos e não é pressuposta para ser utilizada diretamente a partir do seu código.

Executa a Close() na tecla atual.

Aplica-se a

Ver também