RegistryKey.OpenSubKey メソッド

定義

指定したサブキーを取得します。

オーバーロード

OpenSubKey(String, Boolean)

指定したサブキーを取得します。また、キーに書き込みアクセスを適用するかどうかを指定します。

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights)

指定したアクセス権を要求して、指定したサブキーを読み取りアクセスまたは読み取り/書き込みアクセス用に取得します。

OpenSubKey(String, RegistryRights)

指定された名前とアクセス権を持つサブキーを取得します。 .NET Framework 4.6 以降で使用できます。

OpenSubKey(String)

サブキーを読み取り専用で取得します。

OpenSubKey(String, RegistryKeyPermissionCheck)

指定したサブキーを読み取りアクセスまたは読み取り/書き込みアクセス用に取得します。

OpenSubKey(String, Boolean)

ソース:
RegistryKey.cs

指定したサブキーを取得します。また、キーに書き込みアクセスを適用するかどうかを指定します。

public:
 Microsoft::Win32::RegistryKey ^ OpenSubKey(System::String ^ name, bool writable);
public Microsoft.Win32.RegistryKey OpenSubKey (string name, bool writable);
public Microsoft.Win32.RegistryKey? OpenSubKey (string name, bool writable);
member this.OpenSubKey : string * bool -> Microsoft.Win32.RegistryKey
Public Function OpenSubKey (name As String, writable As Boolean) As RegistryKey

パラメーター

name
String

開くサブキーの名前またはパス。

writable
Boolean

キーへの書き込みアクセスが必要な場合には true に設定してください。

戻り値

要求されたサブキー。操作が失敗した場合は null

例外

namenullです。

RegistryKey が閉じています。閉じられたキーにはアクセスできません。

ユーザーに、指定したモードでのレジストリ キーへのアクセスに必要なアクセス許可がありません。

次のコード例では、テスト キーを作成し、 メソッドを OpenSubKey 使用して開き、 メソッドの両方のオーバーロードを示します。

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryOpenSubKeyExample", false );
    RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( L"RegistryOpenSubKeyExample" );
    rk->Close();

    // Obtain an instance of RegistryKey for the CurrentUser registry
    // root.
    RegistryKey ^ rkCurrentUser = Registry::CurrentUser;

    // Obtain the test key (read-only) and display it.
    RegistryKey ^ rkTest = rkCurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();
    rkCurrentUser->Close();

    // Obtain the test key in one step, using the CurrentUser registry
    // root.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();

    // Open the test key in read/write mode.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample", true );
    rkTest->SetValue( L"TestName", L"TestValue" );
    Console::WriteLine( L"Test value for TestName: {0}", rkTest->GetValue( L"TestName" ) );
    rkTest->Close();

    return 0;
} //Main
using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
        rk.Close();

        // Obtain an instance of RegistryKey for the CurrentUser registry
        // root.
        RegistryKey rkCurrentUser = Registry.CurrentUser;

        // Obtain the test key (read-only) and display it.
        RegistryKey rkTest = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();
        rkCurrentUser.Close();

        // Obtain the test key in one step, using the CurrentUser registry
        // root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();

        // Open the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", true);
        rkTest.SetValue("TestName", "TestValue");
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"));
        rkTest.Close();
    } //Main
} //Example
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample")
        rk.Close

        ' Obtain an instance of RegistryKey for the CurrentUser registry 
        ' root. 
        Dim rkCurrentUser As RegistryKey = Registry.CurrentUser

        ' Obtain the test key (read-only) and display it.
        Dim rkTest As RegistryKey = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close
        rkCurrentUser.Close

        ' Obtain the test key in one step, using the CurrentUser registry 
        ' root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close

        ' Obtain the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", True)
        rkTest.SetValue("TestName", "TestValue")
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"))
        rkTest.Close
    End Sub
End Class

注釈

要求されたキーが存在しない場合、このメソッドは例外を null スローする代わりに を返します。

trueの場合、キーは読み取りと書き込みのために開かれます。それ以外の場合writable、キーは読み取り専用として開かれます。

メソッドを使用 OpenSubKey するには、 メソッドの RegistryKey インスタンスが必要です。 の RegistryKeyインスタンスを取得するには、 クラスの静的メンバーのいずれかを Registry 使用します。

こちらもご覧ください

適用対象

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights)

ソース:
RegistryKey.cs

指定したアクセス権を要求して、指定したサブキーを読み取りアクセスまたは読み取り/書き込みアクセス用に取得します。

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

パラメーター

name
String

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

permissionCheck
RegistryKeyPermissionCheck

キーが読み取りアクセスで開かれているか、それとも読み取り/書き込みアクセスで開かれているかを示す列挙値の 1 つ。

rights
RegistryRights

必要なセキュリティ アクセスを表す列挙値のビットごとの組み合わせ。

戻り値

要求されたサブキー。操作が失敗した場合は null

属性

例外

namenull です

permissionCheck に無効な値が含まれています。

RegistryKey が閉じています。閉じられたキーにはアクセスできません。

rights に、無効なレジストリ権限の値が含まれています。

- または -

ユーザーに、要求されたアクセス許可がありません。

注釈

このメソッドは、例外をスローするのではなく、要求されたキーが存在しない場合に を返 null します。

が の場合permissionCheck、キーは読み取りと書き込みのために開かれます。が RegistryKeyPermissionCheck.ReadSubTree または RegistryKeyPermissionCheck.Defaultの場合permissionCheck、親キーが で開かなければ、キーは読み取り用にRegistryKeyPermissionCheck.ReadWriteSubTreeRegistryKeyPermissionCheck.ReadWriteSubTreeかれます。

に指定されたアクセスは、 に permissionCheck 指定された rightsアクセスよりも優先されます。 たとえば、 と RegistryRights.WriteKey に をrightspermissionCheck指定RegistryKeyPermissionCheck.ReadSubTreeした場合、サブキーに書き込もうとすると例外がスローされます。

メソッドを使用 OpenSubKey するには、 クラスの RegistryKey インスタンスが必要です。 の RegistryKeyインスタンスを取得するには、 クラスの静的メンバーのいずれかを Registry 使用します。

こちらもご覧ください

適用対象

OpenSubKey(String, RegistryRights)

ソース:
RegistryKey.cs

指定された名前とアクセス権を持つサブキーを取得します。 .NET Framework 4.6 以降で使用できます。

public:
 Microsoft::Win32::RegistryKey ^ OpenSubKey(System::String ^ name, System::Security::AccessControl::RegistryRights rights);
public Microsoft.Win32.RegistryKey OpenSubKey (string name, System.Security.AccessControl.RegistryRights rights);
public Microsoft.Win32.RegistryKey? OpenSubKey (string name, System.Security.AccessControl.RegistryRights rights);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey OpenSubKey (string name, System.Security.AccessControl.RegistryRights rights);
member this.OpenSubKey : string * System.Security.AccessControl.RegistryRights -> Microsoft.Win32.RegistryKey
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.OpenSubKey : string * System.Security.AccessControl.RegistryRights -> Microsoft.Win32.RegistryKey
Public Function OpenSubKey (name As String, rights As RegistryRights) As RegistryKey

パラメーター

name
String

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

rights
RegistryRights

レジストリ キーの権限。

戻り値

要求されたサブキー。操作が失敗した場合は null

属性

例外

namenullです。

RegistryKey が閉じています。閉じられたキーにはアクセスできません。

ユーザーに、指定したモードでのレジストリ キーへのアクセスに必要なアクセス許可がありません。

注釈

キーは、他のメソッドやプロパティで操作する前に開く必要があります。 キーを変更するには、書き込みアクセスを指定できる メソッドの OpenSubKey オーバーロードを使用してキーを開く必要があります。

適用対象

OpenSubKey(String)

ソース:
RegistryKey.cs

サブキーを読み取り専用で取得します。

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

パラメーター

name
String

読み取り専用で開くサブキーの名前またはパス。

戻り値

要求されたサブキー。操作が失敗した場合は null

例外

namenull です

RegistryKey が閉じています。閉じられたキーにはアクセスできません。

ユーザーに、レジストリ キーの読み取りに必要なアクセス許可がありません。

次のコード例では、テスト キーを作成し、 メソッドを OpenSubKey 使用して開き、 メソッドの両方のオーバーロードを示します。

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryOpenSubKeyExample", false );
    RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( L"RegistryOpenSubKeyExample" );
    rk->Close();

    // Obtain an instance of RegistryKey for the CurrentUser registry
    // root.
    RegistryKey ^ rkCurrentUser = Registry::CurrentUser;

    // Obtain the test key (read-only) and display it.
    RegistryKey ^ rkTest = rkCurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();
    rkCurrentUser->Close();

    // Obtain the test key in one step, using the CurrentUser registry
    // root.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();

    // Open the test key in read/write mode.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample", true );
    rkTest->SetValue( L"TestName", L"TestValue" );
    Console::WriteLine( L"Test value for TestName: {0}", rkTest->GetValue( L"TestName" ) );
    rkTest->Close();

    return 0;
} //Main
using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
        rk.Close();

        // Obtain an instance of RegistryKey for the CurrentUser registry
        // root.
        RegistryKey rkCurrentUser = Registry.CurrentUser;

        // Obtain the test key (read-only) and display it.
        RegistryKey rkTest = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();
        rkCurrentUser.Close();

        // Obtain the test key in one step, using the CurrentUser registry
        // root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();

        // Open the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", true);
        rkTest.SetValue("TestName", "TestValue");
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"));
        rkTest.Close();
    } //Main
} //Example
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample")
        rk.Close

        ' Obtain an instance of RegistryKey for the CurrentUser registry 
        ' root. 
        Dim rkCurrentUser As RegistryKey = Registry.CurrentUser

        ' Obtain the test key (read-only) and display it.
        Dim rkTest As RegistryKey = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close
        rkCurrentUser.Close

        ' Obtain the test key in one step, using the CurrentUser registry 
        ' root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close

        ' Obtain the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", True)
        rkTest.SetValue("TestName", "TestValue")
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"))
        rkTest.Close
    End Sub
End Class

注釈

キーは、他のメソッドやプロパティで操作する前に開く必要があります。 キーを変更するには、オーバーロードやオーバーロードなどの書き込みアクセスを指定できる メソッドのOpenSubKeyオーバーロードでキーをOpenSubKey(String, RegistryKeyPermissionCheck)OpenSubKey(String, Boolean)開く必要があります。

指定したサブキーが見つからない場合は、 null が返されます。

メソッドを使用 OpenSubKey するには、 の RegistryKeyインスタンスが必要です。 の RegistryKeyインスタンスを取得するには、 クラスの静的メンバーのいずれかを Registry 使用します。

こちらもご覧ください

適用対象

OpenSubKey(String, RegistryKeyPermissionCheck)

ソース:
RegistryKey.cs

指定したサブキーを読み取りアクセスまたは読み取り/書き込みアクセス用に取得します。

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

パラメーター

name
String

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

permissionCheck
RegistryKeyPermissionCheck

キーが読み取りアクセスで開かれているか、それとも読み取り/書き込みアクセスで開かれているかを示す列挙値の 1 つ。

戻り値

要求されたサブキー。操作が失敗した場合は null

属性

例外

namenull です

permissionCheck に無効な値が含まれています。

RegistryKey が閉じています。閉じられたキーにはアクセスできません。

ユーザーに、レジストリ キーの読み取りに必要なアクセス許可がありません。

次のコード例では、100 個のキーと値のペアを含むサブキーを作成して閉じます。 この例では、 を使用して Defaultサブキーを開き、すべての値の読み取りにかかる時間を記録し、サブキーを閉じます。 この例では、 でサブキーを開き ReadSubTree 、すべての値の読み取りにかかる時間を記録します。 最後に、この例では、改善率を計算して表示します。

using System;
using Microsoft.Win32;
using System.Diagnostics;

public class Example
{
    public static void Main()
    {
        const int LIMIT = 100;
        RegistryKey cu = Registry.CurrentUser;
        const string testKey = "RegistryKeyPermissionCheckExample";

        Console.WriteLine("Generating {0} key/value pairs.", LIMIT);
        RegistryKey rk = cu.CreateSubKey(testKey);
        for (int i = 0; i < LIMIT; i++)
        {
            rk.SetValue("Key" + i, i);
        }

        rk.Close();

        Stopwatch s = new Stopwatch();

        // On the default setting, security is checked every time
        // a key/value pair is read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.Default);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta1 = s.ElapsedTicks;

        s.Reset();

        // When the key is opened with ReadSubTree, security is
        // not checked when the values are read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.ReadSubTree);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta2 = s.ElapsedTicks;

        double faster = (double) (delta1 - delta2) / (double) delta1;
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.",
            (faster * 100).ToString("0.0"), LIMIT);

        cu.DeleteSubKey(testKey);
    }
}

/* This code example produces output similar to the following:

Generating 100 key/value pairs.
ReadSubTree is 23.4% faster for 100 values.
 */
Imports Microsoft.Win32
Imports System.Diagnostics

Public Class Example
    
    Public Shared Sub Main() 

        Const LIMIT As Integer = 100
        Dim cu As RegistryKey = Registry.CurrentUser
        Const testKey As String = "RegistryKeyPermissionCheckExample"
        
        Console.WriteLine("Generating {0} key/value pairs.", LIMIT)
        Dim rk As RegistryKey = cu.CreateSubKey(testKey)

        For i As Integer = 0 To LIMIT
            rk.SetValue("Key" & i, i)
        Next i
        
        rk.Close()
        
        Dim s As New Stopwatch()
        
        ' On the default setting, security is checked every time
        ' a key/value pair is read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.Default)
        
        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta1 As Long = s.ElapsedTicks
        
        s.Reset()
        
        ' When the key is opened with ReadSubTree, security is 
        ' not checked when the values are read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.ReadSubTree)
        
        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta2 As Long = s.ElapsedTicks
        
        Dim faster As Double = _
            CDbl(delta1 - delta2) * 100.0 / CDbl(delta1)
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.", _
            faster.ToString("0.0"), LIMIT)
        
        cu.DeleteSubKey(testKey)
    
    End Sub 
End Class 

' This code example produces output similar to the following:
'
'Generating 100 key/value pairs.
'ReadSubTree is 23.4% faster for 100 values.
'

注釈

このメソッドは、例外をスローするのではなく、要求されたキーが存在しない場合に を返 null します。

が の場合permissionCheck、キーは読み取りと書き込みのために開かれます。が RegistryKeyPermissionCheck.ReadSubTree または RegistryKeyPermissionCheck.Defaultの場合permissionCheck、親キーが で開かなければ、キーは読み取り用にRegistryKeyPermissionCheck.ReadWriteSubTreeRegistryKeyPermissionCheck.ReadWriteSubTreeかれます。

メソッドを使用 OpenSubKey するには、 クラスの RegistryKey インスタンスが必要です。 の RegistryKeyインスタンスを取得するには、 クラスの静的メンバーのいずれかを Registry 使用します。

こちらもご覧ください

適用対象