レジストリキーを作成する - C#

C#でレジストリキーを作成するコードを紹介します。

概要

C#でレジストリのキーを作成する場合は、Microsoft.Win32 名前空間の Registry クラスを利用します。

書式

\HKEY_CURRENT_USER ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.CurrentUser.CreateSubKey("(作成するキー名)");
\HKEY_LOCAL_MACHINE ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.LocalMachine.CreateSubKey("(作成するキー名)");
\HKEY_CLASSES_ROOT ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("(作成するキー名)");
\HKEY_USERS ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.Users.CreateSubKey("(作成するキー名)");
\HKEY_CURRENT_CONFIG ルートキーの下にキーを作成する場合
Microsoft.Win32.Registry.CurrentConfig.CreateSubKey("(作成するキー名)");
パフォーマンスデータに関するHKEY_PERFORMANCE_DATA キーの操作です。(HKEY_PERFORMANCE_DATA はレジストリには存在しないキーです。)
Microsoft.Win32.Registry.PerformanceData.CreateSubKey("(作成するキー名)");
現在は使われていません。
Microsoft.Win32.Registry.DynData.CreateSubKey("(作成するキー名)");

プログラム

UI

下図のUIを作成します。フォームにテキストボックスとボタン、複数行的とボックスを配置します。


コード

下記のコードを記述します。フォームに配置したbutton1のクリックイベントを実装になります。
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;

namespace RegistryDemo
{
  public partial class FormWriteRegisitry : Form
  {
    public FormWriteRegisitry()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      string KeyName = textBox1.Text;
      Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\"+KeyName);
      if (rkey!= null) {
        textBox2.Text = "OK";
      }
    }
  }
}

解説

上部のテキストボックスに入力された名称のキーを \HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo キー内に作成するコードになります。

textBox1に入力された文字列を KeyName 変数に代入して受け取ります。
  string KeyName = textBox1.Text;

Microsoft.Win32 名前空間の Registry クラスのアクセスしたいレジストリルートキーのフィールドオブジェクトのCreateSubKeyメソッドを呼び出します。今回は \HKEY_CURRENT_USER をルートキーとするレジストリにキーを作成しますので、Registry.CurrentUser フィールドの CreateSubKey メソッドを呼び出します。CreateSubKey メソッドの第一引数に作成するキーのルートノードからのフルパスを与えます。
下記のコードでは SOFTWARE\iPentec\Demo\ キー内にテキストボックスに入力された文字のキーを作成します。
  Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\"+KeyName);

CreateSubKeyは正常に終了すると RegistryKey オブジェクトを返します。オブジェクトが null であれば異常ですので、null出ないことを確認してテキストボックスに"OK"のメッセージを表示します。
  if (rkey!= null) {
    textBox2.Text = "OK";
  }

実行結果

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


上部のテキストボックスに "Penguin" の文字列を入力します。入力後 [Create RegKey] ボタンをクリックします。


キーの作成が正常に終了すると下部のテキストボックスに"OK"のメッセージが表示されます。


レジストリにキーが作成されているか確認します。レジストリエディタを起動します。


\HKEY_CURRENT_USER\SOFTWARE\iPentec\Demo キーを開きます。キー内に "Penguin" サブキーが作成されていることが確認できました。


C#のプログラムからレジストリのキーが作成できました。

補足

usingにMicrosoft.Win32を追加すれば、名前空間の明示的指定は不要です。
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 Button1_Click(object sender, EventArgs e)
    {
      string KeyName = textBox1.Text;
      RegistryKey rkey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\iPentec\Demo\" + KeyName);
      if (rkey != null) {
        textBox2.Text = "OK";
      }
    }
  }
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2019-08-19
作成日: 2019-08-17
iPentec all rights reserverd.