Language

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 。

例外

name は nullです。

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 を返します。

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

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);
[System.Runtime.InteropServices.ComVisible(false)]
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);
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 。

属性

例外

name は null です

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

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

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

-又は-

ユーザーは、要求されたアクセス許可を持っていません。

注釈

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

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

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

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 。

属性

例外

name は nullです。

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 。

例外

name は null です

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);
[System.Runtime.InteropServices.ComVisible(false)]
public Microsoft.Win32.RegistryKey OpenSubKey(string name, Microsoft.Win32.RegistryKeyPermissionCheck permissionCheck);
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 。

属性

例外

name は null です

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

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

こちらもご覧ください

適用対象