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

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

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

注意

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

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

ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

IDisposable.Dispose()

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

对当前密钥执行 Close()

扩展方法

GetAccessControl(RegistryKey)

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

GetAccessControl(RegistryKey, AccessControlSections)

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

SetAccessControl(RegistryKey, RegistrySecurity)

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

适用于

另请参阅