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 . сведения о элементах базового уровня в этой иерархии). При хранении сведений в реестре выберите соответствующее расположение в зависимости от типа хранимой информации. Не забудьте избежать уничтожения информации, созданной другими приложениями, так как это может привести к непредвиденному поведению этих приложений, а также может оказать негативное влияние на собственное приложение.
Important
Этот тип реализует 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, Boolean, RegistryOptions) |
Создает новый подраздел или открывает существующий подраздел с указанным доступом. Доступно начиная с .NET Framework 4.6. |
| CreateSubKey(String, Boolean) |
Создает новый подраздел или открывает существующий подраздел с указанным доступом. Доступно начиная с .NET Framework 4.6. |
| CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity) |
Создает подраздел или открывает подраздел для доступа на запись, используя указанный параметр проверки разрешений, параметр реестра и безопасность реестра. |
| CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions) |
Создает подраздел или открывает подраздел для доступа на запись, используя указанные параметры проверки разрешений и реестра. |
| CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity) |
Создает новый подраздел или открывает существующий подраздел для доступа на запись, используя указанный параметр проверки разрешений и безопасность реестра. |
| CreateSubKey(String, RegistryKeyPermissionCheck) |
Создает новый подраздел или открывает существующий подраздел для доступа на запись с помощью указанного параметра проверки разрешений. |
| CreateSubKey(String) |
Создает новый подраздел или открывает существующий подраздел для доступа на запись. |
| DeleteSubKey(String, Boolean) |
Удаляет указанный подраздел и указывает, вызывается ли исключение, если подраздел не найден. |
| DeleteSubKey(String) |
Удаляет указанный подраздел. |
| DeleteSubKeyTree(String, Boolean) |
Удаляет указанный подраздел и все дочерние подразделы рекурсивно и указывает, вызывается ли исключение, если подраздел не найден. |
| DeleteSubKeyTree(String) |
Удаляет вложенный ключ и все дочерние подразделы рекурсивно. |
| DeleteValue(String, Boolean) |
Удаляет указанное значение из этого ключа и указывает, вызывается ли исключение, если значение не найдено. |
| DeleteValue(String) |
Удаляет указанное значение из этого ключа. |
| Dispose() |
Освобождает все ресурсы, используемые текущим экземпляром класса RegistryKey. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Finalize() |
Закрывает ключ и удаляет его на диск, если содержимое было изменено. |
| Flush() |
Записывает все атрибуты указанного открытого раздела реестра в реестр. |
| FromHandle(SafeRegistryHandle, RegistryView) |
Создает раздел реестра из указанного дескриптора и параметра представления реестра. |
| FromHandle(SafeRegistryHandle) |
Создает раздел реестра из указанного дескриптора. |
| GetAccessControl() |
Возвращает безопасность управления доступом для текущего раздела реестра. |
| GetAccessControl(AccessControlSections) |
Возвращает указанные разделы безопасности управления доступом для текущего раздела реестра. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetLifetimeService() |
Устаревшие..
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetSubKeyNames() |
Извлекает массив строк, содержащих все имена вложенных ключей. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| GetValue(String, Object, RegistryValueOptions) |
Извлекает значение, связанное с указанным именем и параметрами извлечения. Если имя не найдено, возвращает указанное значение по умолчанию. |
| GetValue(String, Object) |
Извлекает значение, связанное с указанным именем. Если имя не найдено, возвращает указанное значение по умолчанию. |
| GetValue(String) |
Извлекает значение, связанное с указанным именем. Возвращает, |
| GetValueKind(String) |
Извлекает тип данных реестра значения, связанного с указанным именем. |
| GetValueNames() |
Извлекает массив строк, содержащий все имена значений, связанные с этим ключом. |
| InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| OpenBaseKey(RegistryHive, RegistryView) |
Открывает новый RegistryKey , представляющий запрошенный ключ на локальном компьютере с указанным представлением. |
| OpenRemoteBaseKey(RegistryHive, String, RegistryView) |
Открывает новый раздел реестра, представляющий запрошенный ключ на удаленном компьютере с указанным представлением. |
| OpenRemoteBaseKey(RegistryHive, String) |
Открывает новый RegistryKey объект, представляющий запрошенный ключ на удаленном компьютере. |
| OpenSubKey(String, Boolean) |
Извлекает указанный подраздел и указывает, следует ли применять доступ на запись к ключу. |
| OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights) |
Извлекает указанный подраздел для доступа на чтение или чтение или запись, запрашивая указанные права доступа. |
| OpenSubKey(String, RegistryKeyPermissionCheck) |
Извлекает указанный подраздел для доступа на чтение или чтение или запись. |
| OpenSubKey(String, RegistryRights) |
Извлекает подраздел с указанным именем и правами доступа. Доступно начиная с .NET Framework 4.6. |
| OpenSubKey(String) |
Извлекает подраздел как доступный только для чтения. |
| SetAccessControl(RegistrySecurity) |
Применяет Windows безопасность управления доступом к существующему разделу реестра. |
| SetValue(String, Object, RegistryValueKind) |
Задает значение пары name/value в разделе реестра с помощью указанного типа данных реестра. |
| SetValue(String, Object) |
Задает указанную пару "имя-значение". |
| ToString() |
Извлекает строковое представление этого ключа. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDisposable.Dispose() |
Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода. Выполняет текущий Close() ключ. |
Методы расширения
| Имя | Описание |
|---|---|
| GetAccessControl(RegistryKey, AccessControlSections) |
Возвращает сведения о безопасности раздела реестра. |
| GetAccessControl(RegistryKey) |
Возвращает сведения о безопасности раздела реестра. |
| SetAccessControl(RegistryKey, RegistrySecurity) |
Изменяет атрибуты безопасности существующего раздела реестра. |