RegistryKey.SetValue Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Legt den Wert eines Namens-Wert-Paars im Registrierungsschlüssel fest. Je nach Überladung wird der Registrierungsdatentyp vom Typ der zu speichernden Oder aus einem angegebenen RegistryValueKindDatentyp bestimmt.
Überlädt
| Name | Beschreibung |
|---|---|
| SetValue(String, Object) |
Legt das angegebene Name/Wert-Paar fest. |
| SetValue(String, Object, RegistryValueKind) |
Legt den Wert eines Namens-Wert-Paars im Registrierungsschlüssel mithilfe des angegebenen Registrierungsdatentyps fest. |
SetValue(String, Object)
- Quelle:
- RegistryKey.cs
Legt das angegebene Name/Wert-Paar fest.
public:
void SetValue(System::String ^ name, System::Object ^ value);
public void SetValue(string? name, object value);
public void SetValue(string name, object value);
member this.SetValue : string * obj -> unit
Public Sub SetValue (name As String, value As Object)
Parameter
- name
- String
Der Name des zu speichernden Werts.
- value
- Object
Die zu speichernden Daten.
Ausnahmen
value ist null.
value ist ein nicht unterstützter Datentyp.
Die RegistryKey Mit dem angegebenen Wert ist geschlossen (auf geschlossene Schlüssel kann nicht zugegriffen werden).
Die RegistryKey Datei ist schreibgeschützt und kann nicht geschrieben werden. Beispielsweise wurde der Schlüssel nicht mit Schreibzugriff geöffnet.
-oder-
Das objekt RegistryKey stellt einen Knoten auf Stammebene dar, und das Betriebssystem ist Windows Millennium Edition oder Windows 98.
Der Benutzer verfügt nicht über die erforderlichen Berechtigungen zum Erstellen oder Ändern von Registrierungsschlüsseln.
Das objekt RegistryKey stellt einen Knoten auf Stammebene dar, und das Betriebssystem ist Windows 2000, Windows XP oder Windows Server 2003.
Beispiele
Das folgende Codebeispiel zeigt, wie die SetValue Methode den Registrierungsdatentyp bestimmt, wenn Werte festgelegt werden. Im Beispiel wird ein Testschlüssel erstellt und dem Schlüssel Werte verschiedener Datentypen hinzugefügt. Anschließend liest das Beispiel die Namen-Wert-Paare und zeigt diese mithilfe der GetValueKind Methode zur Anzeige der entsprechenden Registrierungsdatentypen an der Konsole an.
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
Hinweise
Da viele Werte in jedem Schlüssel in der Registrierung gespeichert werden können, müssen Sie den name Parameter verwenden, um den bestimmten Wert anzugeben, den Sie festlegen möchten.
Note
Ein Registrierungsschlüssel kann einen Wert aufweisen, der keinem Namen zugeordnet ist. Wenn dieser unbenannte Wert im Registrierungs-Editor angezeigt wird, wird die Zeichenfolge "(Standard)" anstelle eines Namens angezeigt. Um diesen unbenannten Wert festzulegen, geben Sie eine null oder die leere Zeichenfolge ("") für name.
Um Werte in einem Schlüssel festzulegen, müssen Sie den Schlüssel mit Schreibzugriff öffnen. Nachdem Sie einen Schlüssel mit Schreibzugriff geöffnet haben, können Sie jedes der Namen/Wert-Paare in diesem Schlüssel ändern.
Wenn der angegebene name Wert nicht im Schlüssel vorhanden ist, wird er erstellt, und der zugeordnete Wert wird auf value.
Diese Überladung speichert SetValue 64-Bit-Ganzzahlen als Zeichenfolgen (RegistryValueKind.String). Um 64-Bit-Zahlen als RegistryValueKind.QWord Werte zu speichern, verwenden Sie die Überladung, die SetValue(String, Object, RegistryValueKind) angibt RegistryValueKind.
Diese Überladung speichert SetValue alle Zeichenfolgenwerte als RegistryValueKind.String, auch wenn sie erweiterbare Verweise auf Umgebungsvariablen enthalten. Um Zeichenfolgenwerte als erweiterbare Zeichenfolgen zu speichern (RegistryValueKind.ExpandString), verwenden Sie die Überladung, die SetValue(String, Object, RegistryValueKind) angibt RegistryValueKind.
Numerische Typen außer 32-Bit-Ganzzahlen werden durch diese Methodenüberladung als Zeichenfolgen gespeichert. Enumerationselemente werden als Zeichenfolgen gespeichert, die die Elementnamen enthalten.
Vorsicht
Machen Sie Objekte nicht so verfügbar RegistryKey , dass ein schädliches Programm Tausende von bedeutungslosen Unterschlüsseln oder Schlüssel-Wert-Paaren erstellen kann. Lassen Sie beispielsweise nicht zu, dass Anrufer beliebige Schlüssel oder Werte eingeben.
Weitere Informationen
Gilt für:
SetValue(String, Object, RegistryValueKind)
- Quelle:
- RegistryKey.cs
Legt den Wert eines Namens-Wert-Paars im Registrierungsschlüssel mithilfe des angegebenen Registrierungsdatentyps fest.
public:
void SetValue(System::String ^ name, System::Object ^ value, Microsoft::Win32::RegistryValueKind valueKind);
public void SetValue(string? name, object value, Microsoft.Win32.RegistryValueKind valueKind);
public void SetValue(string name, object value, Microsoft.Win32.RegistryValueKind valueKind);
[System.Runtime.InteropServices.ComVisible(false)]
public void SetValue(string name, object value, Microsoft.Win32.RegistryValueKind valueKind);
member this.SetValue : string * obj * Microsoft.Win32.RegistryValueKind -> unit
[<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)
Parameter
- name
- String
Der Name des zu speichernden Werts.
- value
- Object
Die zu speichernden Daten.
- valueKind
- RegistryValueKind
Der Registrierungsdatentyp, der beim Speichern der Daten verwendet werden soll.
- Attribute
Ausnahmen
value ist null.
Der Typ der value Nicht-Übereinstimmung mit dem registrierungsdatentyp, der durch valueKindangegeben wurde, daher konnten die Daten nicht ordnungsgemäß konvertiert werden.
Die RegistryKey Mit dem angegebenen Wert ist geschlossen (auf geschlossene Schlüssel kann nicht zugegriffen werden).
Die RegistryKey Datei ist schreibgeschützt und kann nicht geschrieben werden. Beispielsweise wurde der Schlüssel nicht mit Schreibzugriff geöffnet.
-oder-
Das objekt RegistryKey stellt einen Knoten auf Stammebene dar, und das Betriebssystem ist Windows Millennium Edition oder Windows 98.
Der Benutzer verfügt nicht über die erforderlichen Berechtigungen zum Erstellen oder Ändern von Registrierungsschlüsseln.
Das objekt RegistryKey stellt einen Knoten auf Stammebene dar, und das Betriebssystem ist Windows 2000, Windows XP oder Windows Server 2003.
Beispiele
Im folgenden Codebeispiel wird ein Testschlüssel erstellt und die SetValue Methode verwendet, um mehrere Werte zu speichern, wobei der Registrierungsdatentyp für jeden Wert angegeben wird. Anschließend liest das Beispiel die Namen-Wert-Paare und zeigt diese mithilfe der GetValueKind Methode zur Anzeige der entsprechenden Registrierungsdatentypen an der Konsole an.
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.***]
Hinweise
Da viele Werte in jedem Schlüssel in der Registrierung gespeichert werden können, müssen Sie den name Parameter verwenden, um den bestimmten Wert anzugeben, den Sie festlegen möchten.
Note
Ein Registrierungsschlüssel kann einen Wert aufweisen, der keinem Namen zugeordnet ist. Wenn dieser unbenannte Wert im Registrierungs-Editor angezeigt wird, wird die Zeichenfolge "(Standard)" anstelle eines Namens angezeigt. Um diesen unbenannten Wert festzulegen, geben Sie eine null oder die leere Zeichenfolge ("") für name.
Um Werte in einem Schlüssel festzulegen, müssen Sie den Schlüssel mit Schreibzugriff öffnen. Nachdem Sie einen Schlüssel mit Schreibzugriff geöffnet haben, können Sie jedes der Namen/Wert-Paare in diesem Schlüssel ändern.
Wenn der angegebene name Wert nicht im Schlüssel vorhanden ist, wird er erstellt, und der zugeordnete Wert wird auf value.
Note
Die Angabe des Registrierungsdatentyps Unknown entspricht der Verwendung der SetValue Überladung.
Wenn der Typ des angegebenen value Werts nicht mit dem angegebenen valueKindübereinstimmt und die Daten nicht konvertiert werden können, ArgumentException wird ausgelöst. Sie können z. B. eine System.Int64 als , RegistryValueKind.DWordaber nur dann speichern, wenn der Wert kleiner als der Maximalwert einer .System.Int32 Sie können einen einzelnen Zeichenfolgenwert nicht als ein RegistryValueKind.MultiString.
Note
Wenn boxed values passed for RegistryValueKind.DWord or RegistryValueKind.QWord, the conversion is done using the invariant culture.
Vorsicht
Machen Sie Objekte nicht so verfügbar RegistryKey , dass ein schädliches Programm Tausende von bedeutungslosen Unterschlüsseln oder Schlüssel-Wert-Paaren erstellen kann. Lassen Sie beispielsweise nicht zu, dass Anrufer beliebige Schlüssel oder Werte eingeben.