RegistryKey.GetValue 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
检索与指定名称关联的值。
重载
GetValue(String, Object, RegistryValueOptions) |
检索与指定的名称和检索选项关联的值。 如果未找到名称,则返回你提供的默认值。 |
GetValue(String) |
检索与指定名称关联的值。 如果注册表中不存在名称/值对,则返回 |
GetValue(String, Object) |
检索与指定名称关联的值。 如果未找到名称,则返回你提供的默认值。 |
GetValue(String, Object, RegistryValueOptions)
- Source:
- RegistryKey.cs
检索与指定的名称和检索选项关联的值。 如果未找到名称,则返回你提供的默认值。
public:
System::Object ^ GetValue(System::String ^ name, System::Object ^ defaultValue, Microsoft::Win32::RegistryValueOptions options);
public object GetValue (string name, object defaultValue, Microsoft.Win32.RegistryValueOptions options);
public object? GetValue (string? name, object? defaultValue, Microsoft.Win32.RegistryValueOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public object GetValue (string name, object defaultValue, Microsoft.Win32.RegistryValueOptions options);
member this.GetValue : string * obj * Microsoft.Win32.RegistryValueOptions -> obj
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.GetValue : string * obj * Microsoft.Win32.RegistryValueOptions -> obj
Public Function GetValue (name As String, defaultValue As Object, options As RegistryValueOptions) As Object
参数
- name
- String
要检索的值的名称。 此字符串不区分大小写。
- defaultValue
- Object
当 name
不存在时返回的值。
- options
- RegistryValueOptions
枚举值之一,它指定对所检索值的可选处理方式。
返回
与 name
关联的值,按指定的 options
对其进行处理;如果未找到 defaultValue
,则为 name
。
- 属性
例外
该用户没有读取注册表项所需的权限。
包含指定值的 RegistryKey 已关闭(无法访问关闭的项)。
包含指定值的 RegistryKey 已标记为删除。
options
不是有效的 RegistryValueOptions 值;例如,无效值将强制转换为 RegistryValueOptions。
用户没有必需的注册表权限。
示例
下面的代码示例创建一个测试键,添加一个包含嵌入环境变量的值,并在展开窗体和未扩展窗体中检索值。
#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"RegistryValueOptionsExample", false );
RegistryKey ^ rk =
Registry::CurrentUser->CreateSubKey( L"RegistryValueOptionsExample" );
// Add a value that contains an environment variable.
rk->SetValue( L"ExpandValue", L"The path is %PATH%",
RegistryValueKind::ExpandString );
// Retrieve the value, first without expanding the environment
// variable and then expanding it.
Console::WriteLine( L"Unexpanded: \"{0}\"",
rk->GetValue( L"ExpandValue",
L"No Value",
RegistryValueOptions::DoNotExpandEnvironmentNames ) );
Console::WriteLine( L"Expanded: \"{0}\"", rk->GetValue( L"ExpandValue" ) );
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("RegistryValueOptionsExample", false);
RegistryKey rk =
Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample");
// Add a value that contains an environment variable.
rk.SetValue("ExpandValue", "The path is %PATH%", RegistryValueKind.ExpandString);
// Retrieve the value, first without expanding the environment
// variable and then expanding it.
Console.WriteLine("Unexpanded: \"{0}\"",
rk.GetValue("ExpandValue", "No Value",
RegistryValueOptions.DoNotExpandEnvironmentNames));
Console.WriteLine("Expanded: \"{0}\"", rk.GetValue("ExpandValue"));
} //Main
} //Example
Imports Microsoft.Win32
Public Class Example
Public Shared Sub Main()
' Delete and recreate the test key.
Registry.CurrentUser.DeleteSubKey("RegistryValueOptionsExample", False)
Dim rk As RegistryKey = _
Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample")
' Add a value that contains an environment variable.
rk.SetValue("ExpandValue", "The path is %PATH%", _
RegistryValueKind.ExpandString)
' Retrieve the value, first without expanding the environment
' variable and then expanding it.
Console.WriteLine("Unexpanded: ""{0}""", _
rk.GetValue("ExpandValue", "No Value", _
RegistryValueOptions.DoNotExpandEnvironmentNames))
Console.WriteLine("Expanded: ""{0}""", rk.GetValue("ExpandValue"))
End Sub
End Class
注解
使用此重载指定检索到的值的特殊处理。 例如,可以在检索类型的RegistryValueKind.ExpandString注册表值时指定RegistryValueOptions.DoNotExpandEnvironmentNames检索字符串,而无需展开嵌入的环境变量。
defaultValue
使用 参数指定要返回的值(如果name
不存在)。
注意
注册表项可以有一个不与任何名称关联的值。 当此未命名值显示在注册表编辑器中时,将显示字符串“ (Default) ”,而不是名称。 若要检索此未命名值,请指定 null
或 空字符串 (“”) 。name
GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。 在这两种情况下,都返回默认值 (null
) ,而不是实际值。
另请参阅
适用于
GetValue(String)
- Source:
- RegistryKey.cs
检索与指定名称关联的值。 如果注册表中不存在名称/值对,则返回 null
。
public:
System::Object ^ GetValue(System::String ^ name);
public object GetValue (string name);
public object? GetValue (string? name);
member this.GetValue : string -> obj
Public Function GetValue (name As String) As Object
参数
- name
- String
要检索的值的名称。 此字符串不区分大小写。
返回
与 name
关联的值;如果未找到 name
,则为 null
。
例外
该用户没有读取注册表项所需的权限。
包含指定值的 RegistryKey 已关闭(无法访问关闭的项)。
包含指定值的 RegistryKey 已标记为删除。
用户没有必需的注册表权限。
示例
下面的代码示例创建一个测试键,并将不同数据类型的值添加到该键。 然后,该示例读取名称/值对并将其显示到控制台,并使用 GetValueKind 方法检索相应的注册表数据类型。
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.***]
注解
注意
注册表项可以有一个不与任何名称关联的值。 当此未命名值显示在注册表编辑器中时,将显示字符串“ (Default) ”,而不是名称。 若要检索此未命名值,请指定 null
或 空字符串 (“”) 。name
GetValue当 方法检索 () RegistryValueKind.ExpandString 的可展开字符串值时,它会使用来自本地环境的数据扩展环境字符串。 若要从远程计算机上的注册表中检索可展开的字符串值,请使用 GetValue(String, Object, RegistryValueOptions) 方法重载指定不希望展开环境字符串。
注意
如果包含对环境变量的可展开引用的值已存储为字符串 (RegistryValueKind.String) ,而不是 () 的可展开字符串 RegistryValueKind.ExpandString , GetValue 则不会展开它。 可以通过调用 ExpandEnvironmentVariables 方法在检索到此类字符串后展开该字符串。
注意
从 PerformanceData 密钥检索数据的建议方法是使用 PerformanceCounter 类而不是 RegistryKey.GetValue 方法。
GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。 在这两种情况下,都返回默认值 (null
) ,而不是实际值。
另请参阅
适用于
GetValue(String, Object)
- Source:
- RegistryKey.cs
检索与指定名称关联的值。 如果未找到名称,则返回你提供的默认值。
public:
System::Object ^ GetValue(System::String ^ name, System::Object ^ defaultValue);
public object GetValue (string name, object defaultValue);
public object? GetValue (string? name, object? defaultValue);
member this.GetValue : string * obj -> obj
Public Function GetValue (name As String, defaultValue As Object) As Object
参数
- name
- String
要检索的值的名称。 此字符串不区分大小写。
- defaultValue
- Object
当 name
不存在时返回的值。
返回
与 name
关联的值,不展开嵌入的任何环境变量;如果未找到 defaultValue
,则为 name
。
例外
该用户没有读取注册表项所需的权限。
包含指定值的 RegistryKey 已关闭(无法访问关闭的项)。
包含指定值的 RegistryKey 已标记为删除。
用户没有必需的注册表权限。
示例
下面的代码示例使用 值创建一个测试键,并检索该值。 然后,该示例尝试从 键中检索不存在的值;在这种情况下, GetValue 方法返回指定的默认值。
using namespace System;
using namespace Microsoft::Win32;
public ref class RegGetDef
{
public:
static void Main()
{
// Create a reference to a valid key. In order for this code to
// work, the indicated key must have been created previously.
// The key name is not case-sensitive.
RegistryKey^ rk = Registry::LocalMachine->OpenSubKey("Software\\myTestKey", false);
// Get the value from the specified name/value pair in the key.
String^ valueName = "myTestValue";
Console::WriteLine("Retrieving registry value ...");
Console::WriteLine();
Object^ o = rk->GetValue(valueName);
Console::WriteLine("Object Type = " + o->GetType()->FullName);
Console::WriteLine();
switch (rk->GetValueKind(valueName))
{
case RegistryValueKind::String:
case RegistryValueKind::ExpandString:
Console::WriteLine("Value = " + o);
break;
case RegistryValueKind::Binary:
for each (Byte^ b in (array<Byte^>^)o)
{
Console::Write("{0:x2} ", b);
}
Console::WriteLine();
break;
case RegistryValueKind::DWord:
Console::WriteLine("Value = " + Convert::ToString((Int32^)o));
break;
case RegistryValueKind::QWord:
Console::WriteLine("Value = " + Convert::ToString((Int64^)o));
break;
case RegistryValueKind::MultiString:
for each (String^ s in (array<String^>^)o)
{
Console::Write("[{0:s}], ", s);
}
Console::WriteLine();
break;
default:
Console::WriteLine("Value = (Unknown)");
break;
}
// Attempt to retrieve a value that does not exist; the specified
// default value is returned.
String^ def = (String^)rk->GetValue("notavalue", "The default to return");
Console::WriteLine();
Console::WriteLine(def);
rk->Close();
}
};
int main()
{
RegGetDef::Main();
}
/*
Output:
Retrieving registry value ...
Object Type = System.String
Value = testData
The default to return
*/
using System;
using Microsoft.Win32;
class RegGetDef
{
public static void Main()
{
// Create a reference to a valid key. In order for this code to
// work, the indicated key must have been created previously.
// The key name is not case-sensitive.
RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software\\myTestKey", false);
// Get the value from the specified name/value pair in the key.
string valueName = "myTestValue";
Console.WriteLine("Retrieving registry value ...");
Console.WriteLine();
object o = rk.GetValue(valueName);
Console.WriteLine("Object Type = " + o.GetType().FullName);
Console.WriteLine();
switch (rk.GetValueKind(valueName))
{
case RegistryValueKind.String:
case RegistryValueKind.ExpandString:
Console.WriteLine("Value = " + o);
break;
case RegistryValueKind.Binary:
foreach (byte b in (byte[])o)
{
Console.Write("{0:x2} ", b);
}
Console.WriteLine();
break;
case RegistryValueKind.DWord:
Console.WriteLine("Value = " + Convert.ToString((int)o));
break;
case RegistryValueKind.QWord:
Console.WriteLine("Value = " + Convert.ToString((Int64)o));
break;
case RegistryValueKind.MultiString:
foreach (string s in (string[])o)
{
Console.Write("[{0:s}], ", s);
}
Console.WriteLine();
break;
default:
Console.WriteLine("Value = (Unknown)");
break;
}
// Attempt to retrieve a value that does not exist; the specified
// default value is returned.
string def = (string)rk.GetValue("notavalue", "The default to return");
Console.WriteLine();
Console.WriteLine(def);
rk.Close();
}
}
/*
Output:
Retrieving registry value ...
Object Type = System.String
Value = testData
The default to return
*/
Imports Microsoft.Win32
Public Class RegGetDef
Public Shared Sub Main()
' Create a reference to a valid key. In order for this code to
' work, the indicated key must have been created previously.
' The key name is not case-sensitive.
Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\myTestKey", false)
' Get the value from the specified name/value pair in the key.
Dim valueName As String = "myTestValue"
Console.WriteLine("Retrieving registry value ...")
Console.WriteLine()
Dim o As Object = rk.GetValue(valueName)
Console.WriteLine("Object Type = " + o.GetType().FullName)
Console.WriteLine()
Select Case rk.GetValueKind(valueName)
Case RegistryValueKind.String
Case RegistryValueKind.ExpandString
Console.WriteLine("Value = " + o)
Case RegistryValueKind.Binary
For Each b As Byte In CType(o,Byte())
Console.Write("{0:x2} ", b)
Next b
Console.WriteLine()
Case RegistryValueKind.DWord
Console.WriteLine("Value = " + Convert.ToString(CType(o,Int32)))
Case RegistryValueKind.QWord
Console.WriteLine("Value = " + Convert.ToString(CType(o,Int64)))
Case RegistryValueKind.MultiString
For Each s As String In CType(o,String())
Console.Write("[{0:s}], ", s)
Next s
Console.WriteLine()
Case Else
Console.WriteLine("Value = (Unknown)")
End Select
' Attempt to retrieve a value that does not exist; the specified
' default value is returned.
Dim Def As String = rk.GetValue("notavalue", "The default to return")
Console.WriteLine()
Console.WriteLine(def)
rk.Close()
End Sub
End Class
'
' Output:
' Retrieving registry value ...
'
' Object Type = System.String
'
' Value = testData
'
'The default to return
注解
使用 的 GetValue 此重载来处理名称尚不存在的情况 (例如,首次运行应用程序时)。 每当调用此重载时,请使用 defaultValue
参数指定要返回的值(如果 name
不存在)。
注意
注册表项可以有一个不与任何名称关联的值。 当此未命名值显示在注册表编辑器中时,将显示字符串“ (Default) ”,而不是名称。 若要检索此未命名值,请指定 null
或 空字符串 (“”) 。name
GetValue当 方法检索 () RegistryValueKind.ExpandString 的可展开字符串值时,它会使用来自本地环境的数据扩展环境字符串。 若要从远程计算机上的注册表中检索可展开的字符串值,请使用 GetValue 重载指定不希望扩展环境字符串。
注意
如果包含对环境变量的可展开引用的值已存储为字符串 (RegistryValueKind.String) ,而不是 () 的可展开字符串 RegistryValueKind.ExpandString ,则 GetValue 方法不会展开它。 可以通过调用 ExpandEnvironmentVariables 方法在检索到此类字符串后展开该字符串。
注意
从 PerformanceData 密钥检索数据的建议方法是使用 PerformanceCounter 类而不是 RegistryKey.GetValue 方法。
GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。 在这两种情况下,都返回默认值 (null
) ,而不是实际值。