RegistryKey.CreateSubKey 方法

定义

创建新的子项或打开现有子项。

重载

名称 说明
CreateSubKey(String)

创建新的子项或打开用于写入访问的现有子项。

CreateSubKey(String, RegistryKeyPermissionCheck)

使用指定的权限检查选项创建新的子项或打开现有子项进行写入访问。

CreateSubKey(String, Boolean)

创建新的子项或打开具有指定访问权限的现有子项。 从 .NET Framework 4.6 开始可用。

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions)

使用指定的权限检查和注册表选项创建子项或打开子项进行写入访问。

CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity)

使用指定的权限检查选项和注册表安全性创建新的子项或打开现有子项进行写入访问。

CreateSubKey(String, Boolean, RegistryOptions)

创建新的子项或打开具有指定访问权限的现有子项。 从 .NET Framework 4.6 开始可用。

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

使用指定的权限检查选项、注册表选项和注册表安全性创建子项或打开用于写入访问权限的子项。

CreateSubKey(String)

Source:
RegistryKey.cs

创建新的子项或打开用于写入访问的现有子项。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey);
member this.CreateSubKey : string -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。 此字符串不区分大小写。

返回

新建的子项,或者 null 操作失败。 如果指定 subkey了零长度字符串,则返回当前 RegistryKey 对象。

例外

subkeynull

用户没有创建或打开注册表项所需的权限。

RegistryKey正在调用此方法的关闭方式(无法访问已关闭的键)。

RegistryKey无法将其写入;例如,它未作为可写密钥打开,或者用户没有必要的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥,或尝试在根目录中 LocalMachine 创建密钥。

示例

下面的代码示例演示如何在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

注解

若要执行此操作,用户必须在注册表层次结构中具有此级别和更低级别的权限。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 RegistryKey 对象。 例如,不允许调用方输入任意键或值。

另请参阅

适用于

CreateSubKey(String, RegistryKeyPermissionCheck)

Source:
RegistryKey.cs

使用指定的权限检查选项创建新的子项或打开现有子项进行写入访问。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, Microsoft::Win32::RegistryKeyPermissionCheck permissionCheck);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck);
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, permissionCheck As RegistryKeyPermissionCheck) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。 此字符串不区分大小写。

permissionCheck
RegistryKeyPermissionCheck

枚举值之一,该值指定是打开密钥进行读/写访问。

返回

新建的子项,或者 null 操作失败。 如果指定 subkey了零长度字符串,则返回当前 RegistryKey 对象。

属性

例外

subkeynull

用户没有创建或打开注册表项所需的权限。

permissionCheck 包含无效值。

RegistryKey正在调用此方法的关闭方式(无法访问已关闭的键)。

RegistryKey无法写入该密钥;例如,它未作为可写密钥打开,或者用户没有必要的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥,或尝试在根目录中 LocalMachine 创建密钥。

注解

若要执行此操作,用户必须在注册表层次结构中具有此级别和更低级别的权限。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 RegistryKey 对象。 例如,不允许调用方输入任意键或值。

若要使用 OpenSubKey 该方法,必须具有类的 RegistryKey 实例。 若要获取其实例 RegistryKey,请使用类的 Registry 一个静态成员。

另请参阅

适用于

CreateSubKey(String, Boolean)

Source:
RegistryKey.cs

创建新的子项或打开具有指定访问权限的现有子项。 从 .NET Framework 4.6 开始可用。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, bool writable);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, bool writable);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, bool writable);
member this.CreateSubKey : string * bool -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CreateSubKey : string * bool -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, writable As Boolean) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。 此字符串不区分大小写。

writable
Boolean

true 指示新子项可写;否则,为 false.

返回

新建的子项,或者 null 操作失败。 如果指定 subkey了零长度字符串,则返回当前 RegistryKey 对象。

属性

例外

subkeynull

用户没有创建或打开注册表项所需的权限。

当前 RegistryKey 无法写入;例如,它未作为可写密钥打开,或者用户没有必要的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥,或尝试在根目录中 LocalMachine 创建密钥。

注解

若要执行此操作,用户必须在注册表层次结构中具有此级别和更低级别的权限。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 RegistryKey 对象。 例如,不允许调用方输入任意键或值。

若要使用 CreateSubKey 该方法,必须具有类的 RegistryKey 实例。 若要获取其实例 RegistryKey,请使用类的 Registry 一个静态成员。

适用于

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions)

Source:
RegistryKey.cs

使用指定的权限检查和注册表选项创建子项或打开子项进行写入访问。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, Microsoft::Win32::RegistryKeyPermissionCheck permissionCheck, Microsoft::Win32::RegistryOptions registryOptions);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, Microsoft.Win32.RegistryOptions registryOptions);
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck * Microsoft.Win32.RegistryOptions -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, permissionCheck As RegistryKeyPermissionCheck, registryOptions As RegistryOptions) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。

permissionCheck
RegistryKeyPermissionCheck

枚举值之一,该值指定是打开密钥进行读/写访问。

registryOptions
RegistryOptions

要使用的注册表选项;例如,用于创建可变键。

返回

新建的子项,或者 null 操作失败。

例外

subkeynull

当前 RegistryKey 对象已关闭(无法访问关闭的键)。

RegistryKey当前对象无法写入;例如,它未作为可写密钥打开,或者用户没有所需的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥或尝试在根目录中 LocalMachine 创建密钥。

用户没有创建或打开注册表项所需的权限。

注解

若要获取当前RegistryKey对象,请为 指定一个空字符串(“”) 。subkey

适用于

CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity)

Source:
RegistryKey.cs

使用指定的权限检查选项和注册表安全性创建新的子项或打开现有子项进行写入访问。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, Microsoft::Win32::RegistryKeyPermissionCheck permissionCheck, System::Security::AccessControl::RegistrySecurity ^ registrySecurity);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, System.Security.AccessControl.RegistrySecurity? registrySecurity);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, System.Security.AccessControl.RegistrySecurity registrySecurity);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, System.Security.AccessControl.RegistrySecurity registrySecurity);
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck * System.Security.AccessControl.RegistrySecurity -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck * System.Security.AccessControl.RegistrySecurity -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, permissionCheck As RegistryKeyPermissionCheck, registrySecurity As RegistrySecurity) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。 此字符串不区分大小写。

permissionCheck
RegistryKeyPermissionCheck

枚举值之一,该值指定是打开密钥进行读/写访问。

registrySecurity
RegistrySecurity

新密钥的访问控制安全性。

返回

新建的子项,或者 null 操作失败。 如果指定 subkey了零长度字符串,则返回当前 RegistryKey 对象。

属性

例外

subkeynull

用户没有创建或打开注册表项所需的权限。

permissionCheck 包含无效值。

RegistryKey正在调用此方法的关闭方式(无法访问已关闭的键)。

当前 RegistryKey 无法写入;例如,它未作为可写密钥打开,或者用户没有必要的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥,或尝试在根目录中 LocalMachine 创建密钥。

注解

该方法 CreateSubKey 创建具有参数指定的访问控制的 registrySecurity 注册表项。 RegistryKey返回的对象表示注册表项,但该对象不受参数中指定的registrySecurity访问控制的限制。

permissionCheck如果是RegistryKeyPermissionCheck.ReadWriteSubTree,则打开密钥进行读/写访问。 permissionCheck如果是RegistryKeyPermissionCheck.ReadSubTree,则打开密钥进行读取访问。

为了向后兼容,将打开密钥进行读取和写入(如果是permissionCheckRegistryKeyPermissionCheck.Default)并且父键也具有RegistryKeyPermissionCheck.Default。 如果父密钥具有任何其他设置,则读/写状态由父密钥的设置控制。

若要执行此操作,用户必须在注册表层次结构中具有此级别和更低级别的权限。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 RegistryKey 对象。 例如,不允许调用方输入任意键或值。

若要使用 OpenSubKey 该方法,必须具有类的 RegistryKey 实例。 若要获取其实例 RegistryKey,请使用类的 Registry 一个静态成员。

另请参阅

适用于

CreateSubKey(String, Boolean, RegistryOptions)

Source:
RegistryKey.cs

创建新的子项或打开具有指定访问权限的现有子项。 从 .NET Framework 4.6 开始可用。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, bool writable, Microsoft::Win32::RegistryOptions options);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, bool writable, Microsoft.Win32.RegistryOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, bool writable, Microsoft.Win32.RegistryOptions options);
member this.CreateSubKey : string * bool * Microsoft.Win32.RegistryOptions -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CreateSubKey : string * bool * Microsoft.Win32.RegistryOptions -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, writable As Boolean, options As RegistryOptions) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。 此字符串不区分大小写。

writable
Boolean

true 指示新子项可写;否则,为 false.

options
RegistryOptions

要使用的注册表选项。

返回

新建的子项,或者 null 操作失败。 如果指定 subkey了零长度字符串,则返回当前 RegistryKey 对象。

属性

例外

subkeynull

options 未指定有效的选项

用户没有创建或打开注册表项所需的权限。

当前 RegistryKey 无法写入;例如,它未作为可写密钥打开,或者用户没有必要的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥,或尝试在根目录中 LocalMachine 创建密钥。

注解

若要执行此操作,用户必须在注册表层次结构中具有此级别和更低级别的权限。

Caution

不要以恶意程序可以创建数千个毫无意义的子项或键/值对的方式公开 RegistryKey 对象。 例如,不允许调用方输入任意键或值。

若要使用 CreateSubKey 该方法,必须具有类的 RegistryKey 实例。 若要获取其实例 RegistryKey,请使用类的 Registry 一个静态成员。

适用于

CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

Source:
RegistryKey.cs

使用指定的权限检查选项、注册表选项和注册表安全性创建子项或打开用于写入访问权限的子项。

public:
 Microsoft::Win32::RegistryKey ^ CreateSubKey(System::String ^ subkey, Microsoft::Win32::RegistryKeyPermissionCheck permissionCheck, Microsoft::Win32::RegistryOptions registryOptions, System::Security::AccessControl::RegistrySecurity ^ registrySecurity);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, Microsoft.Win32.RegistryOptions registryOptions, System.Security.AccessControl.RegistrySecurity? registrySecurity);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, Microsoft.Win32.RegistryOptions registryOptions, System.Security.AccessControl.RegistrySecurity registrySecurity);
public Microsoft.Win32.RegistryKey CreateSubKey(string subkey, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck, Microsoft.Win32.RegistryOptions registryOptions, System.Security.AccessControl.RegistrySecurity registrySecurity);
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck * Microsoft.Win32.RegistryOptions * System.Security.AccessControl.RegistrySecurity -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CreateSubKey : string * Microsoft.Win32.RegistryKeyPermissionCheck * Microsoft.Win32.RegistryOptions * System.Security.AccessControl.RegistrySecurity -> Microsoft.Win32.RegistryKey
Public Function CreateSubKey (subkey As String, permissionCheck As RegistryKeyPermissionCheck, registryOptions As RegistryOptions, registrySecurity As RegistrySecurity) As RegistryKey

参数

subkey
String

要创建或打开的子项的名称或路径。

permissionCheck
RegistryKeyPermissionCheck

枚举值之一,该值指定是打开密钥进行读/写访问。

registryOptions
RegistryOptions

要使用的注册表选项。

registrySecurity
RegistrySecurity

新子项的访问控制安全性。

返回

新建的子项,或者 null 操作失败。

属性

例外

subkeynull

当前 RegistryKey 对象已关闭。 无法访问关闭的密钥。

RegistryKey当前对象无法写入;例如,它未作为可写密钥打开,或者用户没有所需的访问权限。

嵌套级别超过 510。

-或-

发生系统错误,例如删除密钥或尝试在根目录中 LocalMachine 创建密钥。

用户没有创建或打开注册表项所需的权限。

注解

若要获取当前RegistryKey对象,请为 指定一个空字符串(“”) 。subkey

适用于