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 接口。 使用完该类型后,应直接或间接处理它。 若要直接释放类型,请在块中Disposetry/调用其catch方法。 若要间接释放它,请使用语言构造,例如 using (在 C# 中)或 Using (在 Visual Basic 中)。 有关详细信息,请参阅接口主题中的 IDisposable “使用实现 IDisposable 的对象”部分。

注册表项是注册表中组织的基本单元,可与文件资源管理器中的文件夹进行比较。 特定键可以具有子项,就像文件夹可以具有子文件夹一样。 只要用户具有相应的权限即可删除每个密钥,并且密钥不是基键或直接位于基键下的级别。 每个键还可以具有与其关联的多个值(一个值可以与一个文件进行比较),该文件用于存储信息 -例如,有关计算机上安装的应用程序的信息。 每个值都包含一条特定的信息,如果需要,可以检索或更新这些信息。 例如,可以在公司的密钥 HKEY_LOCAL_MACHINE\Software下为公司创建一个 RegistryKey 子项,然后为公司创建的每个应用程序创建一个子项。 每个子项保存特定于该应用程序的信息,例如颜色设置、屏幕位置和大小或识别的文件扩展名。

请注意,存储在注册表中的信息可供其他应用程序和用户使用,因此不应用于存储安全数据或关键应用程序信息。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 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)

检索与指定名称关联的值。 如果注册表中不存在名称/值对,则返回 null

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)

使用指定的注册表数据类型设置注册表项中名称/值对的值。

SetValue(String, Object)

设置指定的名称/值对。

ToString()

检索此键的字符串表示形式。

显式接口实现

名称 说明
IDisposable.Dispose()

此 API 支持产品基础结构,不能在代码中直接使用。

对当前键执行 a Close()

扩展方法

名称 说明
GetAccessControl(RegistryKey, AccessControlSections)

返回注册表项的安全信息。

GetAccessControl(RegistryKey)

返回注册表项的安全信息。

SetAccessControl(RegistryKey, RegistrySecurity)

更改现有注册表项的安全属性。

适用于

另请参阅