RegistryKey Класс

Определение

Представляет узел уровня раздела в реестре Windows.Represents a key-level node in the Windows registry. Этот класс является инкапсуляцией реестра.This class is a registry encapsulation.

public ref class RegistryKey sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RegistryKey : MarshalByRefObject, IDisposable
type RegistryKey = class
    inherit MarshalByRefObject
    interface IDisposable
Public NotInheritable Class RegistryKey
Inherits MarshalByRefObject
Implements IDisposable
Наследование
Атрибуты
Реализации

Примеры

В следующем примере кода показано, как создать подраздел в разделе HKEY_CURRENT_USER, манипулировать его содержимым, а затем удалить подраздел.The following code example shows how to create a subkey under HKEY_CURRENT_USER, manipulate its contents, and then delete the subkey.

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

Комментарии

Чтобы получить экземпляр RegistryKey, используйте один из статических членов Registry класса.To get an instance of RegistryKey, use one of the static members of the Registry class.

Реестр выступает в качестве центрального репозитория данных для операционной системы и приложений на компьютере.The registry acts as a central repository of information for the operating system and the applications on a computer. Реестр организован в виде иерархического формата, основанного на логическом упорядочении элементов, хранящихся в нем (см. Registry раздел для элементов базового уровня в этой иерархии).The registry is organized in a hierarchical format, based on a logical ordering of the elements stored within it (please see Registry for the base-level items in this hierarchy). При хранении сведений в реестре выберите соответствующее расположение в зависимости от типа сохраняемых данных.When storing information in the registry, select the appropriate location based on the type of information being stored. Избегайте уничтожения данных, созданных другими приложениями, так как это может привести к непредвиденному поведению приложений, а также может оказать негативное воздействие на работу вашего приложения.Be sure to avoid destroying information created by other applications, because this can cause those applications to exhibit unexpected behavior, and can also have an adverse effect upon your own application.

Важно!

Этот тип реализует интерфейс IDisposable.This type implements the IDisposable interface. По окончании использования выдаленную ему память следует прямо или косвенно освободить.When you have finished using the type, you should dispose of it either directly or indirectly. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Разделы реестра являются базовой единицей организации в реестре и могут сравниваться с папками в проводнике.Registry keys are the base unit of organization in the registry, and can be compared to folders in File Explorer. У конкретного ключа могут быть подразделы, так же как и папка, которая может содержать вложенные папки.A particular key can have subkeys, just as a folder can have subfolders. Каждый ключ можно удалить при условии, что у пользователя есть соответствующие разрешения, и ключ не является базовым ключом или на уровне, расположенном непосредственно под базовыми ключами.Each key can be deleted, as long as the user has the appropriate permissions to do so, and the key is not a base key or at the level directly under the base keys. С каждым ключом также может быть связано несколько значений (значение может сравниваться с файлом), которое используется для хранения информации, например сведения о приложении, установленном на компьютере.Each key can also have multiple values associated with it (a value can be compared to a file), which are used to store the information - for example, information about an application installed on the computer. Каждое значение содержит один конкретный фрагмент информации, который может быть получен или обновлен при необходимости.Each value holds one particular piece of information, which can be retrieved or updated when required. Например, можно создать RegistryKey для своей компании, в разделе HKEY_LOCAL_MACHINE\Software, а затем подраздел для каждого приложения, создаваемого вашей компанией.For instance, you can create a RegistryKey for your company, under the key HKEY_LOCAL_MACHINE\Software, and then a subkey for each application that your company creates. Каждый подраздел содержит сведения, относящиеся к этому приложению, такие как параметры цвета, расположение и размер экрана, или распознаваемые расширения файлов.Each subkey holds the information specific to that application, such as color settings, screen location and size, or recognized file extensions.

Обратите внимание, что данные, хранящиеся в реестре, доступны другим приложениям и пользователям, поэтому их не следует использовать для хранения данных безопасности или важных сведений о приложениях.Note that information stored in the registry is available to other applications and users, and therefore should not be used to store security data or critical application information.

Внимание!

Не предоставляйте RegistryKey объекты таким образом, чтобы вредоносная программа могла создать тысячи бессмысленных подразделов или пар "ключ-значение".Do not expose RegistryKey objects in such a way that a malicious program could create thousands of meaningless subkeys or key/value pairs. Например, не разрешать вызывающим объектам вводить произвольные ключи или значения.For example, do not allow callers to enter arbitrary keys or values.

Начиная с, длина раздела реестра больше не ограничена 255 символами. .NET Framework 4.NET Framework 4Starting in the .NET Framework 4.NET Framework 4, the length of a registry key is no longer limited to 255 characters.

Свойства

Handle

Получает объект SafeRegistryHandle, представляющий раздел реестра, инкапсулируемый текущим объектом RegistryKey.Gets a SafeRegistryHandle object that represents the registry key that the current RegistryKey object encapsulates.

Name

Возвращает имя раздела.Retrieves the name of the key.

SubKeyCount

Возвращает количество подразделов для текущего раздела.Retrieves the count of subkeys of the current key.

ValueCount

Возвращает число значений в разделе.Retrieves the count of values in the key.

View

Получает представление, которое использовалось для создания раздела реестра.Gets the view that was used to create the registry key.

Методы

Close()

Если содержимое раздела было изменено, следует закрыть раздел и записать его на диск.Closes the key and flushes it to disk if its contents have been modified.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Унаследовано от MarshalByRefObject)
CreateSubKey(String)

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись.Creates a new subkey or opens an existing subkey for write access.

CreateSubKey(String, Boolean)

Создает новый подраздел или открывает существующий с указанным доступом.Creates a new subkey or opens an existing subkey with the specified access. Доступно начиная с .NET Framework 4.6.Available starting with .NET Framework 4.6.

CreateSubKey(String, Boolean, RegistryOptions)

Создает новый подраздел или открывает существующий с указанным доступом.Creates a new subkey or opens an existing subkey with the specified access. Доступно начиная с .NET Framework 4.6.Available starting with .NET Framework 4.6.

CreateSubKey(String, RegistryKeyPermissionCheck)

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись, используя заданный вариант проверки разрешений.Creates a new subkey or opens an existing subkey for write access, using the specified permission check option.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions)

Создает подраздел или открывает подраздел с доступом на запись, используя заданные параметры проверки разрешений и параметры реестра.Creates a subkey or opens a subkey for write access, using the specified permission check and registry options.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

Создает подраздел или подраздел с доступом на запись, используя заданные параметры проверки разрешений, параметры реестра и безопасности реестра.Creates a subkey or opens a subkey for write access, using the specified permission check option, registry option, and registry security.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity)

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись, используя заданный вариант проверки разрешений и безопасности реестра.Creates a new subkey or opens an existing subkey for write access, using the specified permission check option and registry security.

DeleteSubKey(String)

Удаляет заданный подраздел.Deletes the specified subkey.

DeleteSubKey(String, Boolean)

Удаляет указанный подраздел и определяет, нужно ли создавать исключение, если подраздел не найден.Deletes the specified subkey, and specifies whether an exception is raised if the subkey is not found.

DeleteSubKeyTree(String)

Рекурсивно удаляет вложенный раздел и все дочерние вложенные разделы.Deletes a subkey and any child subkeys recursively.

DeleteSubKeyTree(String, Boolean)

Рекурсивно удаляет указанный подраздел и все дочерние подразделы и определяет, нужно ли создавать исключение, если не удается найти подраздел.Deletes the specified subkey and any child subkeys recursively, and specifies whether an exception is raised if the subkey is not found.

DeleteValue(String)

Удаляет заданное значение из этого раздела.Deletes the specified value from this key.

DeleteValue(String, Boolean)

Удаляет указанное значение из данного раздела и определяет, нужно ли создавать исключение, если значение на найдено.Deletes the specified value from this key, and specifies whether an exception is raised if the value is not found.

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса RegistryKey.Releases all resources used by the current instance of the RegistryKey class.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Finalize()

Если содержимое раздела было изменено, следует закрыть раздел и записать его на диск.Closes the key and flushes it to disk if the contents have been modified.

Flush()

Записывает в реестр все атрибуты заданного открытого раздела реестра.Writes all the attributes of the specified open registry key into the registry.

FromHandle(SafeRegistryHandle)

Создает раздел реестра на базе указанного дескриптора.Creates a registry key from a specified handle.

FromHandle(SafeRegistryHandle, RegistryView)

Создает раздел реестра на базе указанного дескриптора и параметров представления реестра.Creates a registry key from a specified handle and registry view setting.

GetAccessControl()

Возвращает безопасность элемента управления доступом для текущего раздела реестра.Returns the access control security for the current registry key.

GetAccessControl(AccessControlSections)

Возвращает заданные разделы безопасности элемента управления доступом для текущего раздела реестра.Returns the specified sections of the access control security for the current registry key.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetLifetimeService()

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
GetSubKeyNames()

Возвращает массив строк, который содержит все имена подразделов.Retrieves an array of strings that contains all the subkey names.

GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
GetValue(String)

Возвращает значение, связанное с заданным именем.Retrieves the value associated with the specified name. Возвращает null, если пара "имя-значение" отсутствует в реестре.Returns null if the name/value pair does not exist in the registry.

GetValue(String, Object)

Возвращает значение, связанное с заданным именем.Retrieves the value associated with the specified name. Если имя не найдено, возвращает предоставленное значение по умолчанию.If the name is not found, returns the default value that you provide.

GetValue(String, Object, RegistryValueOptions)

Возвращает значение, связанное с заданным именем и параметрами извлечения.Retrieves the value associated with the specified name and retrieval options. Если имя не найдено, возвращает предоставленное значение по умолчанию.If the name is not found, returns the default value that you provide.

GetValueKind(String)

Возвращает тип данных реестра для значения, связанного с заданным именем.Retrieves the registry data type of the value associated with the specified name.

GetValueNames()

Возвращает массив строк, содержащий все имена значений, связанных с этим разделом.Retrieves an array of strings that contains all the value names associated with this key.

InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

(Унаследовано от MarshalByRefObject)
OpenBaseKey(RegistryHive, RegistryView)

Открывает новый объект RegistryKey, который представляет запрошенный раздел на локальном компьютере в указанном представлении.Opens a new RegistryKey that represents the requested key on the local machine with the specified view.

OpenRemoteBaseKey(RegistryHive, String)

Открытие нового раздела RegistryKey, который представляет запрошенный раздел на удаленном компьютере.Opens a new RegistryKey that represents the requested key on a remote machine.

OpenRemoteBaseKey(RegistryHive, String, RegistryView)

Открывает новый раздел реестра, который представляет запрошенный раздел на удаленном компьютере в указанном представлении.Opens a new registry key that represents the requested key on a remote machine with the specified view.

OpenSubKey(String)

Возвращает подраздел с доступом только для чтения.Retrieves a subkey as read-only.

OpenSubKey(String, Boolean)

Получает указанный подраздел и определяет, следует ли предоставить доступ для записи в этот раздел.Retrieves a specified subkey, and specifies whether write access is to be applied to the key.

OpenSubKey(String, RegistryKeyPermissionCheck)

Возвращает заданный подраздел с доступом для чтения или для чтения и записи.Retrieves the specified subkey for read or read/write access.

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights)

Возвращает заданный подраздел с доступом для чтения или для чтения и записи с запросом заданных прав доступа.Retrieves the specified subkey for read or read/write access, requesting the specified access rights.

OpenSubKey(String, RegistryRights)

Возвращает подраздел с указанным именем и правами доступа.Retrieves a subkey with the specified name and access rights. Доступно начиная с .NET Framework 4.6.Available starting with .NET Framework 4.6.

SetAccessControl(RegistrySecurity)

Применяет безопасность управления доступом Windows к существующему разделу реестра.Applies Windows access control security to an existing registry key.

SetValue(String, Object)

Задает указанную пару "имя-значение".Sets the specified name/value pair.

SetValue(String, Object, RegistryValueKind)

Устанавливает значение пары "имя-значение" в разделе реестра, используя заданный тип данных реестра.Sets the value of a name/value pair in the registry key, using the specified registry data type.

ToString()

Возвращает строковое представление этого раздела.Retrieves a string representation of this key.

Явные реализации интерфейса

IDisposable.Dispose()

Выполняет Close() в текущем реестре.Performs a Close() on the current key.

Методы расширения

GetAccessControl(RegistryKey)
GetAccessControl(RegistryKey, AccessControlSections)
SetAccessControl(RegistryKey, RegistrySecurity)

Применяется к

Дополнительно