Freigeben über


RegistryKey-Klasse

Stellt einen Knoten auf Schlüsselebene in der Windows-Registrierung dar. Diese Klasse ist eine Kapselung der Registrierung.

Namespace: Microsoft.Win32
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ComVisibleAttribute(True)> _
Public NotInheritable Class RegistryKey
    Inherits MarshalByRefObject
    Implements IDisposable
'Usage
Dim instance As RegistryKey
[ComVisibleAttribute(true)] 
public sealed class RegistryKey : MarshalByRefObject, IDisposable
[ComVisibleAttribute(true)] 
public ref class RegistryKey sealed : public MarshalByRefObject, IDisposable
/** @attribute ComVisibleAttribute(true) */ 
public final class RegistryKey extends MarshalByRefObject implements IDisposable
ComVisibleAttribute(true) 
public final class RegistryKey extends MarshalByRefObject implements IDisposable

Hinweise

Um eine Instanz von RegistryKey abzurufen, verwenden Sie einen der statischen Member der Registry-Klasse.

Die Registrierung wirkt als zentraler Aufbewahrungsort für Informationen über Betriebssystem und Anwendungen auf einem Computer. Die Registrierung ist in Form einer Hierarchie strukturiert, die auf einer logischen Anordnung der in ihr gespeicherten Elemente beruht (die Elemente der obersten Ebene dieser Hierarchie finden Sie unter Registry). Wählen Sie zum Speichern von Informationen in der Registrierung den passenden Ort auf der Grundlage der Art der zu speichernden Informationen. Zerstören Sie auf keinen Fall Informationen, die von anderen Anwendungen erstellt wurden, da dies zu unerwartetem Verhalten dieser Anwendungen führen und sich außerdem nachteilig auf Ihre eigene Anwendung auswirken könnte.

Registrierungsschlüssel stellen die Basiseinheit für die Organisation der Registrierung dar und sind mit den Ordnern in Windows Explorer vergleichbar. Ein bestimmter Schlüssel kann über Unterschlüssel verfügen, ebenso wie ein Ordner Unterordner haben kann. Mit Ausnahme der Basisschlüssel und der Schlüssel auf der Ebene direkt unter den Basisschlüsseln kann jeder Schlüssel gelöscht werden, sofern der Benutzer über die dazu erforderlichen Berechtigungen verfügt. Jedem Schlüssel können auch mehrere Werte zugeordnet werden (ein Wert kann mit einer Datei verglichen werden), die zum Speichern der Informationen verwendet werden – zum Beispiel Informationen über eine Anwendung, die auf dem Computer installiert ist. Jeder Wert enthält stets eine bestimmte Information, die bei Bedarf abgerufen oder aktualisiert werden kann. Sie können z. B. einen RegistryKey für Ihr Unternehmen (unter dem Schlüssel HKEY_LOCAL_MACHINE\Software) sowie einen Unterschlüssel für jede vom Unternehmen erstellte Anwendung erstellen. Jeder Unterschlüssel enthält anwendungsspezifische Informationen, z. B. Farbeinstellungen, Bildschirmposition und Bildschirmgröße oder erkannte Dateierweiterungen.

Beachten Sie, dass die in der Registrierung gespeicherten Daten anderen Benutzern und Anwendungen zur Verfügung stehen. Daher sollten dort keine Sicherheitsinformationen oder wichtige Anwendungsdaten abgelegt werden.

Warnung

Stellen Sie keine RegistryKey-Objekte auf eine Art und Weise bereit, dass ein bösartiges Programm Tausende von bedeutungslosen Unterschlüsseln oder Schlüssel-Wert-Paaren erstellen könnte. Lassen Sie beispielsweise nicht zu, dass Aufrufer beliebige Schlüssel oder Werte eingeben können.

Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE: In .NET Compact Framework-Anwendungen müssen alle geöffneten Instanzen eines Unterschlüssels und der untergeordneten Unterschlüssel explizit geschlossen werden, bevor der Unterschlüssel gelöscht werden kann. Die maximale Tiefe der Unterschlüssel, wie von Windows CE bestimmt, ist 15.

Beispiel

Das folgende Codebeispiel veranschaulicht das Erstellen eines Unterschlüssels unter HKEY_CURRENT_USER, das Ändern des Inhalts und das anschließende Löschen des Unterschlüssels.

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

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, ViewAndModify := "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.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
using System;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    ViewAndModify = "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);
        }

        // 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();
        }
    }
}
using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

[assembly:RegistryPermissionAttribute(SecurityAction::RequestMinimum,
ViewAndModify="HKEY_CURRENT_USER")];
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();
   }
}

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
    Microsoft.Win32.RegistryKey

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

RegistryKey-Member
Microsoft.Win32-Namespace
Registry-Klasse
RegistryHive-Enumeration