Поделиться через


RegistryKey Класс

Определение

Представляет узел уровня раздела в реестре Windows. Этот класс является инкапсуляцией реестра.

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

Примеры

В следующем примере кода показано, как создать подраздел в разделе HKEY_CURRENT_USER, управлять его содержимым, а затем удалить подраздел.

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 членов класса .

Реестр выступает в качестве центрального репозитория сведений об операционной системе и приложениях на компьютере. Реестр упорядочен в иерархическом формате на основе логического порядка элементов, хранящихся в нем (см Registry . сведения об элементах базового уровня в этой иерархии). При сохранении сведений в реестре выберите соответствующее расположение в зависимости от типа хранимой информации. Обязательно избегайте уничтожения информации, созданной другими приложениями, так как это может привести к непредвиденному поведению этих приложений, а также негативно повлиять на ваше приложение.

Важно!

Этот тип реализует интерфейс IDisposable. По окончании использования выдаленную ему память следует прямо или косвенно освободить. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.

Разделы реестра являются базовой единицей организации в реестре и могут сравниваться с папками в проводник. У определенного ключа могут быть подразделы, так же как у папки могут быть вложенные папки. Каждый ключ можно удалить, если у пользователя есть соответствующие разрешения, а ключ не является базовым ключом или не находится непосредственно под базовыми ключами. Каждый ключ также может иметь несколько связанных значений (значение можно сравнить с файлом), которые используются для хранения сведений, например сведений о приложении, установленном на компьютере. Каждое значение содержит один определенный фрагмент информации, который можно получить или обновить при необходимости. Например, вы можете создать RegistryKey для своей компании в разделе HKEY_LOCAL_MACHINE\Software ключа, а затем подраздел для каждого приложения, создаваемого вашей компанией. Каждый подраздел содержит сведения, относящиеся к конкретному приложению, такие как параметры цвета, расположение и размер экрана или распознанные расширения файлов.

Обратите внимание, что сведения, хранящиеся в реестре, доступны для других приложений и пользователей и поэтому не должны использоваться для хранения данных безопасности или критически важных сведений о приложении.

Внимание!

Не предоставляйте объекты RegistryKey таким образом, чтобы вредоносная программа могла создавать тысячи бессмысленных подразделов или пар "ключ-значение". Например, не разрешайте вызывающим абонентам вводить произвольные ключи или значения.

Начиная с платформа .NET Framework 4 длина раздела реестра больше не ограничена 255 символами.

Свойства

Handle

Получает объект SafeRegistryHandle, представляющий раздел реестра, инкапсулируемый текущим объектом RegistryKey.

Name

Возвращает имя раздела.

SubKeyCount

Возвращает количество подразделов для текущего раздела.

ValueCount

Возвращает число значений в разделе.

View

Получает представление, которое использовалось для создания раздела реестра.

Методы

Close()

Если содержимое раздела было изменено, следует закрыть раздел и записать его на диск.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

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

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись.

CreateSubKey(String, Boolean)

Создает новый подраздел или открывает существующий с указанным доступом. Доступно начиная с .NET Framework 4.6.

CreateSubKey(String, Boolean, RegistryOptions)

Создает новый подраздел или открывает существующий с указанным доступом. Доступно начиная с .NET Framework 4.6.

CreateSubKey(String, RegistryKeyPermissionCheck)

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись, используя заданный вариант проверки разрешений.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions)

Создает подраздел или открывает подраздел с доступом на запись, используя заданные параметры проверки разрешений и параметры реестра.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

Создает подраздел или подраздел с доступом на запись, используя заданные параметры проверки разрешений, параметры реестра и безопасности реестра.

CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity)

Создает новый вложенный раздел или открывает существующий вложенный раздел с доступом на запись, используя заданный вариант проверки разрешений и безопасности реестра.

DeleteSubKey(String)

Удаляет заданный подраздел.

DeleteSubKey(String, Boolean)

Удаляет указанный подраздел и определяет, нужно ли создавать исключение, если подраздел не найден.

DeleteSubKeyTree(String)

Рекурсивно удаляет вложенный раздел и все дочерние вложенные разделы.

DeleteSubKeyTree(String, Boolean)

Рекурсивно удаляет указанный подраздел и все дочерние подразделы и определяет, нужно ли создавать исключение, если не удается найти подраздел.

DeleteValue(String)

Удаляет заданное значение из этого раздела.

DeleteValue(String, Boolean)

Удаляет указанное значение из данного раздела и определяет, нужно ли создавать исключение, если значение на найдено.

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса RegistryKey.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

Если содержимое раздела было изменено, следует закрыть раздел и записать его на диск.

Flush()

Записывает в реестр все атрибуты заданного открытого раздела реестра.

FromHandle(SafeRegistryHandle)

Создает раздел реестра на базе указанного дескриптора.

FromHandle(SafeRegistryHandle, RegistryView)

Создает раздел реестра на базе указанного дескриптора и параметров представления реестра.

GetAccessControl()

Возвращает безопасность элемента управления доступом для текущего раздела реестра.

GetAccessControl(AccessControlSections)

Возвращает заданные разделы безопасности элемента управления доступом для текущего раздела реестра.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

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

Возвращает массив строк, который содержит все имена подразделов.

GetType()

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

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

Возвращает значение, связанное с заданным именем. Возвращает null, если пара "имя-значение" отсутствует в реестре.

GetValue(String, Object)

Возвращает значение, связанное с заданным именем. Если имя не найдено, возвращает предоставленное значение по умолчанию.

GetValue(String, Object, RegistryValueOptions)

Возвращает значение, связанное с заданным именем и параметрами извлечения. Если имя не найдено, возвращает предоставленное значение по умолчанию.

GetValueKind(String)

Возвращает тип данных реестра для значения, связанного с заданным именем.

GetValueNames()

Возвращает массив строк, содержащий все имена значений, связанных с этим разделом.

InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

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

Создает неполную копию текущего объекта Object.

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

Создает неполную копию текущего объекта MarshalByRefObject.

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

Открывает новый объект RegistryKey, который представляет запрошенный раздел на локальном компьютере в указанном представлении.

OpenRemoteBaseKey(RegistryHive, String)

Открытие нового раздела RegistryKey, который представляет запрошенный раздел на удаленном компьютере.

OpenRemoteBaseKey(RegistryHive, String, RegistryView)

Открывает новый раздел реестра, который представляет запрошенный раздел на удаленном компьютере в указанном представлении.

OpenSubKey(String)

Возвращает подраздел с доступом только для чтения.

OpenSubKey(String, Boolean)

Получает указанный подраздел и определяет, следует ли предоставить доступ для записи в этот раздел.

OpenSubKey(String, RegistryKeyPermissionCheck)

Возвращает заданный подраздел с доступом для чтения или для чтения и записи.

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights)

Возвращает заданный подраздел с доступом для чтения или для чтения и записи с запросом заданных прав доступа.

OpenSubKey(String, RegistryRights)

Возвращает подраздел с указанным именем и правами доступа. Доступно начиная с .NET Framework 4.6.

SetAccessControl(RegistrySecurity)

Применяет безопасность управления доступом Windows к существующему разделу реестра.

SetValue(String, Object)

Задает указанную пару "имя-значение".

SetValue(String, Object, RegistryValueKind)

Устанавливает значение пары "имя-значение" в разделе реестра, используя заданный тип данных реестра.

ToString()

Возвращает строковое представление этого раздела.

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

IDisposable.Dispose()

Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.

Выполняет Close() в текущем реестре.

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

GetAccessControl(RegistryKey)

Возвращает сведения безопасности для раздела реестра.

GetAccessControl(RegistryKey, AccessControlSections)

Возвращает сведения безопасности для раздела реестра.

SetAccessControl(RegistryKey, RegistrySecurity)

Изменяет атрибуты безопасности для существующего раздела реестра.

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

См. также раздел