レジストリに値を書き込む - C#

C#でレジストリに値を書き込むコードを紹介します。

概要

レジストリに値を書き込むには、書き込み先の RegistryKey オブジェクトのSetValue() メソッドを利用します。RegistryKey オブジェクトの取得には、Registry クラスのOpenSubKeyメソッドや、CreateSubKeyメソッドを利用します。

書式

(書き込むレジストリキーのオブジェクト).SetValue((書き込む値の名称), (書き込む値のデータ))
注意
レジストリに書き込むルートキーが \HKEY_CLASSES_ROOT や \HKEY_LOCAL_MACHINE の場合は管理者権限が必要になります。アプリケーションを管理者権限で起動するか、マニフェストファイルを設定して管理者権限で起動が必要な設定にします。マニフェストファイルの指定方法はこちらの記事を参照してください。

プログラム

UI

下図のUIを作成します。テキストボックス2つとボタンを配置します。テキストボックスの一つは複数行のテキストボックスにします。下図の画面ではボタンは2つ設置されていますが、右側のボタン(Button2)のみ利用します。

コード

下記のコードを記述します。基本はボタンクリック時のイベントハンドラの実装になります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace RegistryDemoNoUAC
{
  public partial class FormRegistryWrite : Form
  {
    public FormRegistryWrite()
    {
      InitializeComponent();
    }

    private void Button2_Click(object sender, EventArgs e)
    {
      string KeyName = textBox1.Text;
      Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\iPentec\Demo\" + KeyName, true);
      if (rkey != null) {
        rkey.SetValue("ProductName", "ぺんぎんクッキー");
        rkey.SetValue("ProductPrice", 185);
        textBox2.Text = "OK";
      }
      else {
        textBox2.Text = "レジストリキーが開けませんでした。";
      }
    }
  }
}

解説

上部のテキストボックスに入力された文字列をKeyName変数に代入します。
  string KeyName = textBox1.Text;

OpenSubKeyメソッドを呼び出してキーを開きます。開くキーは \HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo\(テキストボックスに入力された名称) になります。
レジストリに書き込みをする場合は、OpenSubKeyメソッドの第二引数にtrue を与え書き込みできる状態でキーを開きます。
  Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\iPentec\Demo\" + KeyName, true);

キーが存在する場合は、OpenSubKey の戻り値にRegistryKey オブジェクトが返りますが、キーが存在しない場合やキーが開けない場合はnullが返りますので、戻り値がnullの場合はレジストリキーが開けなかった旨のメッセージを表示します。
  if (rkey != null) {
    (......)
   }
   else {
     textBox2.Text = "レジストリキーが開けませんでした。";
   }

OpenSubKey の戻り値がnullではなく RegistryKeyオブジェクトが戻った場合は、SetValueメソッドを呼び出して値を設定します。SetValueの第一引数に設定する値の名前を、第二引数に値のデータを与えます。値の設定後テキストボックスに"OK"のメッセージを表示します。
    rkey.SetValue("ProductName", "ぺんぎんクッキー");
    rkey.SetValue("ProductPrice", 185);
    textBox2.Text = "OK";

実行結果

レジストリキーが存在している場合

プロジェクトを実行します。下図のウィンドウが表示されます。


テキストボックスにアクセスするキー名を入力します。今回は "Penguin" を入力します。また、既に \HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo\Penguin キーは作成されている状態とします。


ボタンをクリックすると "OK" のメッセージが表示されます。


レジストリエディターを開き、\HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo\Penguin キーの値を確認します。ProductName と ProductPrice の2つの値が設定されていることが確認できます。

レジストリキーが存在していない

プロジェクトを実行します。下図のウィンドウが表示されます。


テキストボックスにアクセスするキー名を入力します。今回は "Penguin" を入力します。\HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo\Penguin キーは作成されていない状態とします。


ボタンをクリックすると「レジストリキーが開けませんでした。」のメッセージが表示されます。

補足:「(既定)」のキーに書き込む場合

「規定」のキーに書き込む場合は、キー名に空文字列を与えると書き込みできます。
Button2のコード例
    private void Button2_Click(object sender, EventArgs e)
    {
      string KeyName = textBox1.Text;
      Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\iPentec\Demo\" + KeyName,true);
      if (rkey != null) {
        rkey.SetValue("", "商品情報");
        rkey.SetValue("ProductName", "ぺんぎんクッキー");
        rkey.SetValue("ProductPrice", 185);
        textBox2.Text = "OK";
      }
      else {
        textBox2.Text = "レジストリキーが開けませんでした。";
      }

上記のコードで実行すると (規定) の値に書き込みができていることが確認できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2019-08-20
作成日: 2019-08-17
iPentec all rights reserverd.