レジストリキーのデフォルト値をREG_EXPAND_SZで作成する - C#

レジストリキーのデフォルト値をREG_EXPAND_SZで作成する方法を紹介します。

関連情報

開発環境が無く、C#でのアプリケーション作成ができない場合はPowerShellで変更する方法もあります。
PowerShellで変更する方法は「レジストリキーのデフォルト値をREG_EXPAND_SZで作成する (PowerShell Tips)」の記事を参照してください。

概要

通常レジストリエディタでキーを作成すると、"(既定)"の値の種類は"REG_SZ"で作成されます。


作成後に値の種類を変更できないため、通常の手順では"REG_EXPAND_SZ"で"(規定)"の値を作成できません。

作成手順

C#のプログラムで"REG_EXPAND_SZ"で"(規定)"の値を書きこむプログラムを作成します。

UI

下図のUIを作成します。フォームにボタンを配置します。(使用するボタンは1つのみです。)

コード

下記のコードを記述します。
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 FormRegistry : Form
  {
    public FormRegistry()
    {
      InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
      Microsoft.Win32.RegistryKey regkey
        = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Classes\.penguin\test");

      string value=@"%SystemRoot%\system32\notepad.exe,-470";
      regkey.SetValue("", value, Microsoft.Win32.RegistryValueKind.ExpandString);
    }
  }
}

解説

  Microsoft.Win32.RegistryKey regkey
    = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Classes\.penguin\test");
上記コードでレジストリの"HKEY_LOCAL_MACHINE"の"SOFTWARE\Classes\.penguin\test"キーを開きます。キーが存在しない場合はキーを作成します。

  string value=@"%SystemRoot%\system32\notepad.exe,-470";
  regkey.SetValue("", value, Microsoft.Win32.RegistryValueKind.ExpandString);
上記コードで先の開いたキーの値を設定します。SetValueメソッドの第一引数に空文字を与えることで"(規定)"の値をを編集します。第二引数に設定する値を、第三引数にデータの種類を与えます。今回は"REG_EXPAND_SZ"の値にするため、Microsoft.Win32.RegistryValueKind.ExpandStringを第三引数に与えます。

実行に関する補足

今回の例では"HKEY_LOCAL_MACHINE"を変更するため、一般ユーザーの権限ではレジストリにアクセスできず例外が発生します。
VisualStudioでのデバッグ実行では"UnauthorizedAccessException"が発生します。(下図参照)

実行方法1

レジストリの"HKEY_LOCAL_MACHINE"の変更権を一般ユーザーに与えることで、例外を出さずにアプリケーションを実行できます。
詳しくは「レジストリのアクセス権を変更する - 管理者権限でないプログラムから HKEY_LOCAL_MACHINE を編集できるようにする (Windows Tips)」の記事を参照してください。
開発環境でデバッグしつつ実行する場合はこちらの方法で実行する必要があります。

実行方法2

マニフェストファイルを追加して、アプリケーションを管理者として実行する方法です。詳しくは「リンク」の記事を参照してください。開発環境でデバッグしつつ実行することも可能です。(Visual Studioが管理者モードで起動します。)

実行方法3

レジストリの"HKEY_LOCAL_MACHINE"を変更するため、管理者として実行する手順です。
デバッグが必要なく実行結果が得られれば良い場合はこちらの方法も利用できます。
ビルドしたアプリケーションをエクスプローラで開きます。


実行ファイルを選択し右クリックしポップアップメニューを表示します。メニューの[管理者として実行]を選択します。


フォームが表示されます。先のコードを実装したボタンをクリックします。


クリック後、レジストリエディタを起動し"HKEY_LOCAL_MACHINE"の"SOFTWARE\Classes\.penguin\test"キーを開きます。(規定)の値の種類が"REG_EXPAND_SZ"であることが確認できます。


以上で、(規定)の値の種類を"REG_EXPAND_SZ"として値を設定することができました。

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