次の方法で共有


RegistryKey.CreateSubKey メソッド

新しいサブキーを作成するか、または既存のサブキーを開きます。文字列 subKey では、大文字と小文字は区別されません。

Public Function CreateSubKey( _
   ByVal subkey As String _) As RegistryKey
[C#]
public RegistryKey CreateSubKey(stringsubkey);
[C++]
public: RegistryKey* CreateSubKey(String* subkey);
[JScript]
public function CreateSubKey(
   subkey : String) : RegistryKey;

パラメータ

  • subkey
    作成または開くサブキーの名前またはパス。

戻り値

サブキーを返します。操作が失敗した場合は null を返します。

例外

例外の種類 条件
ArgumentNullException 指定したサブキーが null です。
SecurityException このユーザーには、RegistryPermission.SetInclude(create, currentKey) アクセス許可または RegistryPermission.SetInclude(open, currentKey) アクセス許可がありません。
ArgumentException 指定したサブキーの長さが、許容される最大値 (255 文字) を超えています。
ObjectDisposedException このメソッドの実行対象の RegistryKey が閉じられています。閉じられたキーにはアクセスできません。
UnauthorizedAccessException registrykey に書き込むことができません。キーが書き込み禁止キーとして開かれている場合などに発生します。

解説

このアクションを実行するには、レジストリ階層のこのレベルとその下のレベルへのアクセス許可がユーザーに設定されている必要があります。

使用例

[Visual Basic, C#, C++] HKEY_CURRENT_USER の下にサブキーを作成し、その内容を操作し、その後にサブキーを削除する方法を次のコード例に示します。

 
Imports Microsoft.VisualBasic
Imports System
Imports System.Security.Permissions
Imports Microsoft.Win32

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, All := "HKEY_CURRENT_USER")>

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.SetValue("Password", "Secret")
        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 non-secure password value.
        testSettings = test9999.OpenSubKey("TestSettings", True)
        testSettings.DeleteValue("password")

        ' Verify the deletion.
        Console.WriteLine(CType(testSettings.GetValue( _
            "password", "Password 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

[C#] 
using System;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    All = "HKEY_CURRENT_USER")]

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);
            testSettings.SetValue("Password", "Secret");
        }

        // 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 non-secure password value.
            testSettings.DeleteValue("password");

            // Verify the deletion.
            Console.WriteLine((string)testSettings.GetValue(
                "password", "Password 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();
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

[assembly: RegistryPermissionAttribute(SecurityAction::RequestMinimum,
    All = S"HKEY_CURRENT_USER")];

void main()
{
    // Create a subkey named Test9999 under HKEY_CURRENT_USER.
    RegistryKey* test9999 = 
        Registry::CurrentUser->CreateSubKey(S"Test9999");

    // Create two subkeys under HKEY_CURRENT_USER\Test9999.
    test9999->CreateSubKey(S"TestName")->Close();
    RegistryKey* testSettings = 
        test9999->CreateSubKey(S"TestSettings");

    // Create data for the TestSettings subkey.
    testSettings->SetValue(S"Language", S"French");
    testSettings->SetValue(S"Level", S"Intermediate");
    testSettings->SetValue(S"ID", __box(123));
    testSettings->SetValue(S"Password", S"Secret");
    testSettings->Close();

    // Print the information from the Test9999 subkey.
    Console::WriteLine(S"There are {0} subkeys under Test9999.", 
        test9999->SubKeyCount.ToString());
    String* subKeyNames __gc [] = test9999->GetSubKeyNames();
    for(int i =0; i < subKeyNames->Length; i++)
    {
        RegistryKey* tempKey = test9999->OpenSubKey(subKeyNames[i]);
        Console::WriteLine(S"\nThere are {0} values for {1}.", 
            tempKey->ValueCount.ToString(), tempKey->Name);
        String* valueNames __gc [] = tempKey->GetValueNames();
        for(int j = 0; j < valueNames->Length; j++)
        {
            Console::WriteLine(S"{0,-8}: {1}", valueNames[j], 
                tempKey->GetValue(valueNames[j])->ToString());
        }
    }

    // Delete the non-secure password value.
    testSettings = test9999->OpenSubKey(S"TestSettings", true);
    testSettings->DeleteValue(S"password");

    // Verify the deletion.
    Console::WriteLine(dynamic_cast<String*>(
        testSettings->GetValue("password", S"Password not found.")));
    testSettings->Close();

    // Delete or close the new subkey.
    Console::Write(S"\nDelete newly created registry key? (Y/N) ");
    if(Char::ToUpper(Convert::ToChar(Console::Read())) == 'Y')
    {
        Registry::CurrentUser->DeleteSubKeyTree(S"Test9999");
        Console::WriteLine(S"\nRegistry key {0} deleted.", 
            test9999->Name);
    }
    else
    {
        Console::WriteLine(S"\nRegistry key {0} closed.", 
            test9999->ToString());
        test9999->Close();
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

  • RegistryPermission (指定したレジストリ キーが存在する場合にそのレジストリ キーを変更するために必要なアクセス許可、または指定したレジストリ キーが存在しない場合にそのレジストリ キーを作成するために必要なアクセス許可) WriteCreate (関連する列挙体)
  • SecurityPermission (指定したレジストリ キーがリモート キーである場合にアンマネージ コードにアクセスするために必要なアクセス許可) UnmanagedCode (関連する列挙体)

参照

RegistryKey クラス | RegistryKey メンバ | Microsoft.Win32 名前空間 | DeleteSubKey | OpenSubKey