Поделиться через


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);
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

Одно из значений перечисления, определяющее, с какими правами открывается раздел: только для чтения или для чтения и записи.

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);
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

Одно из значений перечисления, определяющее, с какими правами открывается раздел: только для чтения или для чтения и записи.

Возвращаемое значение

Запрошенный вложенный раздел или 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 членов класса .

См. также раздел

Применяется к