次の方法で共有


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 (指定したレジストリ キーが存在する場合にそのレジストリ キーを変更するために必要なアクセス許可、または指定したレジストリ キーが存在しない場合にそのレジストリ キーを作成するために必要なアクセス許可) WriteCreate (関連する列挙体)
  • SecurityPermission (指定したレジストリ キーがリモート キーである場合にアンマネージ コードにアクセスするために必要なアクセス許可) UnmanagedCode (関連する列挙体)

参照

RegistryKey クラス | RegistryKey メンバ | Microsoft.Win32 名前空間 | GetValue | ValueCount