RegistryKey.SetValue Methode

Definitie

Hiermee stelt u de waarde van een naam/waardepaar in de registersleutel in. Afhankelijk van de overbelasting wordt het registergegevenstype bepaald op basis van het type gegevens dat wordt opgeslagen of van een opgegeven RegistryValueKind.

Overloads

Name Description
SetValue(String, Object)

Hiermee stelt u het opgegeven naam-/waardepaar in.

SetValue(String, Object, RegistryValueKind)

Hiermee stelt u de waarde van een naam/waardepaar in de registersleutel in met behulp van het opgegeven registergegevenstype.

SetValue(String, Object)

Hiermee stelt u het opgegeven naam-/waardepaar in.

public:
 void SetValue(System::String ^ name, System::Object ^ value);
public void SetValue(string name, object value);
member this.SetValue : string * obj -> unit
Public Sub SetValue (name As String, value As Object)

Parameters

name
String

De naam van de waarde die moet worden opgeslagen.

value
Object

De gegevens die moeten worden opgeslagen.

Uitzonderingen

value is null.

value is een niet-ondersteund gegevenstype.

De RegistryKey opgegeven waarde is gesloten (gesloten sleutels kunnen niet worden geopend).

De RegistryKey sleutel is alleen-lezen en kan niet worden geschreven naar; de sleutel is bijvoorbeeld niet geopend met schrijftoegang.

– of –

Het object RegistryKey vertegenwoordigt een knooppunt op hoofdniveau en het besturingssysteem is Windows Millennium Edition of Windows 98.

De gebruiker beschikt niet over de vereiste machtigingen voor het maken of wijzigen van registersleutels.

Het object RegistryKey vertegenwoordigt een hoofdknooppunt en het besturingssysteem is Windows 2000, Windows XP of Windows Server 2003.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe de SetValue methode het registergegevenstype bepaalt wanneer er waarden worden ingesteld. In het voorbeeld wordt een testsleutel gemaakt en worden waarden van verschillende gegevenstypen aan de sleutel toegevoegd. In het voorbeeld worden vervolgens de naam-/waardeparen gelezen en weergegeven in de console, met behulp van de GetValueKind methode om de bijbehorende registergegevenstypen weer te geven.

using namespace System;
using namespace Microsoft::Win32;
int main()
{
   
   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistrySetValueExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistrySetValueExample" );
   
   // Create name/value pairs.
   // Numeric values that cannot be interpreted as DWord (int) values
   // are stored as strings.
   rk->SetValue( "LargeNumberValue1", (long)42 );
   rk->SetValue( "LargeNumberValue2", 42000000000 );
   rk->SetValue( "DWordValue", 42 );
   array<String^>^temp0 = {"One","Two","Three"};
   rk->SetValue( "MultipleStringValue", temp0 );
   array<Byte>^temp1 = {10,43,44,45,14,255};
   rk->SetValue( "BinaryValue", temp1 );
   
   // This overload of SetValue does not support expanding strings. Use
   // the overload that allows you to specify RegistryValueKind.
   rk->SetValue( "StringValue", "The path is %PATH%" );
   
   // Display all the name/value pairs stored in the test key, with
   // the registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) = \"{2}\"", s, rvk, values[ 0 ] );
            for ( int i = 1; i < values->Length; i++ )
            {
               Console::Write( ", \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) = {2:X2}", s, rvk, bytes[ 0 ] );
            for ( int i = 1; i < bytes->Length; i++ )
            {
               
               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
using System;
using Microsoft.Win32;

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

        // Create name/value pairs.

        // Numeric values that cannot be interpreted as DWord (int) values
        // are stored as strings.
        rk.SetValue("LargeNumberValue1", (long) 42);
        rk.SetValue("LargeNumberValue2", 42000000000);

        rk.SetValue("DWordValue", 42);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"});
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255});

        // This overload of SetValue does not support expanding strings. Use
        // the overload that allows you to specify RegistryValueKind.
        rk.SetValue("StringValue", "The path is %PATH%");

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) = \"{2}\"", s, rvk, values[0]);
                    for (int i = 1; i < values.Length; i++)
                    {
                        Console.Write(", \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) = {2:X2}", s, rvk, bytes[0]);
                    for (int i = 1; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistrySetValueExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistrySetValueExample")
        
        ' Create name/value pairs.
        ' Numeric values that cannot be interpreted as DWord (int) values
        ' are stored as strings.
        rk.SetValue("LargeNumberValue1", CType(42, Long))
        rk.SetValue("LargeNumberValue2", 42000000000)
        
        rk.SetValue("DWordValue", 42)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"})
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255})
        
        ' This overload of SetValue does not support expanding strings. Use
        ' the overload that allows you to specify RegistryValueKind.
        rk.SetValue("StringValue", "The path is %PATH%")
        
        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf + " {0} ({1}) = ""{2}""", s, rvk, values(0))
                    Dim i As Integer
                    For i = 1 To values.Length - 1
                        Console.Write(", ""{0}""", values(i))
                    Next i
                    Console.WriteLine()
                
                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf + " {0} ({1}) = {2:X2}", s, rvk, bytes(0))
                    Dim i As Integer
                    For i = 1 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()
                
                Case Else
                    Console.WriteLine(vbCrLf + " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub
End Class

Opmerkingen

Omdat veel waarden in elke sleutel in het register kunnen worden opgeslagen, moet u de name parameter gebruiken om de specifieke waarde op te geven die u wilt instellen.

Note

Een registersleutel kan één waarde hebben die niet is gekoppeld aan een naam. Wanneer deze niet-benoemde waarde wordt weergegeven in de registereditor, wordt de tekenreeks (standaard) weergegeven in plaats van een naam. Als u deze niet-benoemde waarde wilt instellen, geeft u null een of de lege tekenreeks ("") op voor name.

Als u waarden in een sleutel wilt instellen, moet u de sleutel openen met schrijftoegang. Nadat u een sleutel met schrijftoegang hebt geopend, kunt u een van de naam-/waardeparen in die sleutel wijzigen.

Als de opgegeven name sleutel niet bestaat, wordt deze gemaakt en wordt de bijbehorende waarde ingesteld op value.

Deze overbelasting van SetValue 64-bits gehele getallen wordt opgeslagen als tekenreeksen (RegistryValueKind.String). Als u 64-bits getallen als RegistryValueKind.QWord waarden wilt opslaan, gebruikt u de SetValue(String, Object, RegistryValueKind) overbelasting die aangeeft RegistryValueKind.

Met deze overbelasting worden SetValue alle tekenreekswaarden opgeslagen als RegistryValueKind.String, zelfs als ze uitbreidbare verwijzingen naar omgevingsvariabelen bevatten. Als u tekenreekswaarden wilt opslaan als uitbreidbare tekenreeksen (RegistryValueKind.ExpandString), gebruikt u de SetValue(String, Object, RegistryValueKind) overbelasting die aangeeft RegistryValueKind.

Andere numerieke typen dan 32-bits gehele getallen worden opgeslagen als tekenreeksen door deze methodeoverbelasting. Opsommingselementen worden opgeslagen als tekenreeksen die de elementnamen bevatten.

Caution

Maak objecten op een zodanige manier niet beschikbaar RegistryKey dat een schadelijk programma duizenden betekenisloze subsleutels of sleutel-/waardeparen kan maken. Sta bellers bijvoorbeeld niet toe willekeurige sleutels of waarden in te voeren.

Zie ook

Van toepassing op

SetValue(String, Object, RegistryValueKind)

Hiermee stelt u de waarde van een naam/waardepaar in de registersleutel in met behulp van het opgegeven registergegevenstype.

public:
 void SetValue(System::String ^ name, System::Object ^ value, Microsoft::Win32::RegistryValueKind valueKind);
[System.Runtime.InteropServices.ComVisible(false)]
public void SetValue(string name, object value, Microsoft.Win32.RegistryValueKind valueKind);
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.SetValue : string * obj * Microsoft.Win32.RegistryValueKind -> unit
Public Sub SetValue (name As String, value As Object, valueKind As RegistryValueKind)

Parameters

name
String

De naam van de waarde die moet worden opgeslagen.

value
Object

De gegevens die moeten worden opgeslagen.

valueKind
RegistryValueKind

Het registergegevenstype dat moet worden gebruikt bij het opslaan van de gegevens.

Kenmerken

Uitzonderingen

value is null.

Het type value komt niet overeen met het registergegevenstype dat is opgegeven door valueKind, daarom kunnen de gegevens niet correct worden geconverteerd.

De RegistryKey opgegeven waarde is gesloten (gesloten sleutels kunnen niet worden geopend).

De RegistryKey sleutel is alleen-lezen en kan niet worden geschreven naar; de sleutel is bijvoorbeeld niet geopend met schrijftoegang.

– of –

Het object RegistryKey vertegenwoordigt een knooppunt op hoofdniveau en het besturingssysteem is Windows Millennium Edition of Windows 98.

De gebruiker beschikt niet over de vereiste machtigingen voor het maken of wijzigen van registersleutels.

Het object RegistryKey vertegenwoordigt een hoofdknooppunt en het besturingssysteem is Windows 2000, Windows XP of Windows Server 2003.

Voorbeelden

In het volgende codevoorbeeld wordt een testsleutel gemaakt en wordt de SetValue methode gebruikt om verschillende waarden op te slaan, waarbij het registergegevenstype voor elke waarde wordt opgegeven. In het voorbeeld worden vervolgens de naam-/waardeparen gelezen en weergegeven in de console, met behulp van de GetValueKind methode om de bijbehorende registergegevenstypen weer te geven.

using namespace System;
using namespace Microsoft::Win32;
int main()
{
   
   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistryValueKindExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistryValueKindExample" );
   
   // Create name/value pairs.
   // This overload supports QWord (long) values. 
   rk->SetValue( "QuadWordValue", 42, RegistryValueKind::QWord );
   
   // The following SetValue calls have the same effect as using the
   // SetValue overload that does not specify RegistryValueKind.
   //
   rk->SetValue( "DWordValue", 42, RegistryValueKind::DWord );
   rk->SetValue( "MultipleStringValue", gcnew array<String^>{
      "One","Two","Three"
   }, RegistryValueKind::MultiString );
   rk->SetValue( "BinaryValue", gcnew array<Byte>{
      10,43,44,45,14,255
   }, RegistryValueKind::Binary );
   rk->SetValue( "StringValue", "The path is %PATH%", RegistryValueKind::String );
   
   // This overload supports setting expandable string values. Compare
   // the output from this value with the previous string value.
   rk->SetValue( "ExpandedStringValue", "The path is %PATH%", RegistryValueKind::ExpandString );
   
   // Display all the name/value pairs stored in the test key, with the
   // registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < values->Length; i++ )
            {
               if (i != 0) Console::Write(",");
               Console::Write( " \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < bytes->Length; i++ )
            {
               
               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/
using System;
using Microsoft.Win32;

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

        // Create name/value pairs.

        // This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord);

        // The following SetValue calls have the same effect as using the
        // SetValue overload that does not specify RegistryValueKind.
        //
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}, RegistryValueKind.MultiString);
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary);
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String);

        // This overload supports setting expandable string values. Compare
        // the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (i != 0) Console.Write(",");
                        Console.Write(" \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/
Imports Microsoft.Win32

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

        ' Create name/value pairs.
        ' This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord)

        ' The following SetValue calls have the same effect as using the
        ' SetValue overload that does not specify RegistryValueKind.
        '
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, RegistryValueKind.MultiString)
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary)
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String)

        ' This overload supports setting expandable string values. Compare
        ' the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString)


        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To values.Length - 1
                        If i <> 0 Then Console.Write(",")
                        Console.Write(" ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf & " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub
End Class

'
'This code example produces the following output (some output is omitted):
'
' QuadWordValue (QWord) = 42
'
' DWordValue (DWord) = 42
'
' MultipleStringValue (MultiString) = "One", "Two", "Three"
'
' BinaryValue (Binary) = 0A 2B 2C 2D 0E FF
'
' StringValue (String) = The path is %PATH%
'
' ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
' [***The remainder of this output is omitted.***]

Opmerkingen

Omdat veel waarden in elke sleutel in het register kunnen worden opgeslagen, moet u de name parameter gebruiken om de specifieke waarde op te geven die u wilt instellen.

Note

Een registersleutel kan één waarde hebben die niet is gekoppeld aan een naam. Wanneer deze niet-benoemde waarde wordt weergegeven in de registereditor, wordt de tekenreeks (standaard) weergegeven in plaats van een naam. Als u deze niet-benoemde waarde wilt instellen, geeft u null een of de lege tekenreeks ("") op voor name.

Als u waarden in een sleutel wilt instellen, moet u de sleutel openen met schrijftoegang. Nadat u een sleutel met schrijftoegang hebt geopend, kunt u een van de naam-/waardeparen in die sleutel wijzigen.

Als de opgegeven name sleutel niet bestaat, wordt deze gemaakt en wordt de bijbehorende waarde ingesteld op value.

Note

Het opgeven van het registergegevenstype Unknown is hetzelfde als het gebruik van de SetValue overbelasting.

Als het type van de opgegeven value niet overeenkomt met het opgegeven valueKinden de gegevens niet kunnen worden geconverteerd, ArgumentException wordt gegenereerd. U kunt bijvoorbeeld een System.Int64 als a RegistryValueKind.DWordopslaan, maar alleen als de waarde kleiner is dan de maximumwaarde van een System.Int32. U kunt geen enkele tekenreekswaarde opslaan als een RegistryValueKind.MultiString.

Note

Als waarden in vakken worden doorgegeven voor RegistryValueKind.DWord of RegistryValueKind.QWord, wordt de conversie uitgevoerd met behulp van de invariante cultuur.

Caution

Maak objecten op een zodanige manier niet beschikbaar RegistryKey dat een schadelijk programma duizenden betekenisloze subsleutels of sleutel-/waardeparen kan maken. Sta bellers bijvoorbeeld niet toe willekeurige sleutels of waarden in te voeren.

Zie ook

Van toepassing op