RegistryKey.SetValue メソッド
指定した値を設定します。
Public Sub SetValue( _
ByVal name As String, _ ByVal value As Object _)
[C#]
public void SetValue(stringname,objectvalue);
[C++]
public: void SetValue(String* name,Object* value);
[JScript]
public function SetValue(
name : String,value : Object);
パラメータ
- name
データを格納する値の名前。 - value
格納するデータ。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | value が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | 指定した値の長さが、許容される最大長 (255 文字) を超えています。 |
ObjectDisposedException | 設定対象の RegistryKey が閉じています。閉じられたキーにはアクセスできません。 |
UnauthorizedAccessException | 設定対象の RegistryKey が読み取り専用であるため、このキーへ書き込みできません。ルート レベル ノードの場合や、書き込みアクセスが設定された状態でキーが開かれていない場合などです。 |
SecurityException | このユーザーには、RegistryPermission.SetInclude(create, currentKey) アクセス許可または RegistryPermission.SetInclude(open, currentKey) アクセス許可がありません。 |
解説
レジストリの各キーには複数の値を格納できるため、name パラメータには、操作する特定の値を指定します。特定の registrykey の既定値を設定するには、name に null 参照 (Visual Basic では Nothing) または空の文字列 ("") を設定できます。
レジストリで有効な値は、DWORD、バイナリ、または文字列です。文字列値は、次のカテゴリとして表されます。
- sz: データは、null で終わる Unicode 文字列値として表されます。
- multi_sz: データは、null で終わる Unicode 文字列の配列として表されます。
- expanded_sz: データは、環境変数への展開された参照を含む null で終わる Unicode 文字列として表されます。
設定された値を使用して開くキーは、読み取り専用キーではなく、書き込みアクセスが設定された状態で開かれたキーである必要があります。キーに書き込みアクセスを設定した後で、このキーの値に関連付けられているデータを変更できます。
指定した name がキー内にない場合は、この値が作成され、関連付けられているデータが data に設定されます。
メモ 値を設定すると、渡される値をレジストリに格納する方法が解釈されます。渡される情報を sz または expanded_sz 文字列として格納する方法を制御できません。すべての文字列値は標準 sz 値として解釈されます。
値を展開された値として格納する場合、値を取得して適切に解釈するには、 ExpandEnvironmentVariables を使用します。
使用例
[Visual Basic, C#, C++] HKEY_CURRENT_USER の下にサブキーを作成し、その内容を操作し、その後にサブキーを削除する方法を次のコード例に示します。
Imports Microsoft.VisualBasic
Imports System
Imports System.Security.Permissions
Imports Microsoft.Win32
<Assembly: RegistryPermissionAttribute( _
SecurityAction.RequestMinimum, All := "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.SetValue("Password", "Secret")
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 non-secure password value.
testSettings = test9999.OpenSubKey("TestSettings", True)
testSettings.DeleteValue("password")
' Verify the deletion.
Console.WriteLine(CType(testSettings.GetValue( _
"password", "Password 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
[C#]
using System;
using System.Security.Permissions;
using Microsoft.Win32;
[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
All = "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);
testSettings.SetValue("Password", "Secret");
}
// 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 non-secure password value.
testSettings.DeleteValue("password");
// Verify the deletion.
Console.WriteLine((string)testSettings.GetValue(
"password", "Password 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();
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;
[assembly: RegistryPermissionAttribute(SecurityAction::RequestMinimum,
All = S"HKEY_CURRENT_USER")];
void main()
{
// Create a subkey named Test9999 under HKEY_CURRENT_USER.
RegistryKey* test9999 =
Registry::CurrentUser->CreateSubKey(S"Test9999");
// Create two subkeys under HKEY_CURRENT_USER\Test9999.
test9999->CreateSubKey(S"TestName")->Close();
RegistryKey* testSettings =
test9999->CreateSubKey(S"TestSettings");
// Create data for the TestSettings subkey.
testSettings->SetValue(S"Language", S"French");
testSettings->SetValue(S"Level", S"Intermediate");
testSettings->SetValue(S"ID", __box(123));
testSettings->SetValue(S"Password", S"Secret");
testSettings->Close();
// Print the information from the Test9999 subkey.
Console::WriteLine(S"There are {0} subkeys under Test9999.",
test9999->SubKeyCount.ToString());
String* subKeyNames __gc [] = test9999->GetSubKeyNames();
for(int i =0; i < subKeyNames->Length; i++)
{
RegistryKey* tempKey = test9999->OpenSubKey(subKeyNames[i]);
Console::WriteLine(S"\nThere are {0} values for {1}.",
tempKey->ValueCount.ToString(), tempKey->Name);
String* valueNames __gc [] = tempKey->GetValueNames();
for(int j = 0; j < valueNames->Length; j++)
{
Console::WriteLine(S"{0,-8}: {1}", valueNames[j],
tempKey->GetValue(valueNames[j])->ToString());
}
}
// Delete the non-secure password value.
testSettings = test9999->OpenSubKey(S"TestSettings", true);
testSettings->DeleteValue(S"password");
// Verify the deletion.
Console::WriteLine(dynamic_cast<String*>(
testSettings->GetValue("password", S"Password not found.")));
testSettings->Close();
// Delete or close the new subkey.
Console::Write(S"\nDelete newly created registry key? (Y/N) ");
if(Char::ToUpper(Convert::ToChar(Console::Read())) == 'Y')
{
Registry::CurrentUser->DeleteSubKeyTree(S"Test9999");
Console::WriteLine(S"\nRegistry key {0} deleted.",
test9999->Name);
}
else
{
Console::WriteLine(S"\nRegistry key {0} closed.",
test9999->ToString());
test9999->Close();
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- RegistryPermission (指定したレジストリ キーが存在する場合にそのレジストリ キーを変更するために必要なアクセス許可、または指定したレジストリ キーが存在しない場合にそのレジストリ キーを作成するために必要なアクセス許可) Write 、 Create (関連する列挙体)
- SecurityPermission (指定したレジストリ キーがリモート キーである場合にアンマネージ コードにアクセスするために必要なアクセス許可) UnmanagedCode (関連する列挙体)
参照
RegistryKey クラス | RegistryKey メンバ | Microsoft.Win32 名前空間 | GetValue | ValueCount