レジストリの削除 | プログラミングがわからなすぎる

プログラミングがわからなすぎる

気が向いた時の備忘録。プログラミングは好きなのに物凄く単純なものしか理解できないからメモしていくうちに覚えられたらいいな
ターゲットフレームワークは大体4.7.2

先日からレジストリの追加や更新を実行してみているので

今度は削除を動かしてみたいと思います

アンインストールするとき位しか使わない気がしますが…

(インストーラを作成するときに削除する設定にする方が使いそう)

 

 

値の削除 

とりあえず「AddKey」を削除するとことから実行してみます

 

 

 Form1.cs

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace TestApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (RegistryKey key = Registry.CurrentUser.CreateSubKey(
                @"SOFTWARE\TestApp\AddReg"))
            {
                key.DeleteValue("AddKey");
            }
        }
    }
}

「key.」まで入力したときに出てきた関数一覧を見て

DeleteValue()が使えそうと思ったので

引数に「AddKey」を設定して実行してみます

 

 

実行結果 

想定通り設定値が消えています

 

 

レジストリキーからの削除① 

次は\TestApp\AddRegから削除してみようと思います

値が設定されているとはじかれるとかあるかもしれないので

テスト用の値「AddKey」を復活させて実行します

 

 

 Form1.cs

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace TestApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (RegistryKey key = Registry.CurrentUser.CreateSubKey(
                @"SOFTWARE"))
            {
                key.DeleteSubKey(@"TestApp\AddReg");
            }
        }
    }
}

\AddRegと、その親の\TestAppも一緒に消してほしいので

DeleteSubKey()の引数に設定してみました

 

 

実行結果 

\AddReg配下に値が設定されていても\AddRegは消してくれましたが

\TestAppは残ったままでした

指定した一番下のキーが削除されるみたい


 

レジストリキーからの削除② 

 Form1.cs

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace TestApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (RegistryKey key = Registry.CurrentUser.CreateSubKey(
                @"SOFTWARE"))
            {
                key.DeleteSubKey("TestApp");
            }
        }
    }
}

じゃあDeleteSubKey()の引数に親であるTestAppを渡してみます

 

 

実行結果 

 

怒られました

親から抹消しようとするの、この書き方じゃダメみたいです

 

 

レジストリキーからの削除③ 

 Form1.cs

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace TestApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (RegistryKey key = Registry.CurrentUser.CreateSubKey(
                @"SOFTWARE"))
            {
                key.DeleteSubKeyTree("TestApp");
            }
        }
    }
}

DeleteSubKeyTree()という関数もあったので

ここに親であるTestAppを渡してみます

 

 

実行結果 

ちゃんとTestApp配下が削除されました

 

 

メモ 

設定している値を削除する

 →DeleteValue("値")

レジストリキー(子のキーなし)を削除する

 →DeleteSubKey("キー")

  ※キーに階層となっている文字列を設定すると一番子のキーが削除される

レジストリキー(子のキーあり)を削除する

 →DeleteSubKeyTree("キー")

レジストリキーを削除するとき、キーに値が設定されていてもエラーは出ませんでした

↑の書き方によるのかな?