先日からレジストリの追加や更新を実行してみているので
今度は削除を動かしてみたいと思います
アンインストールするとき位しか使わない気がしますが…
(インストーラを作成するときに削除する設定にする方が使いそう)
値の削除
とりあえず「AddKey」を削除するとことから実行してみます
Form1.cs
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 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 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 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("キー")
レジストリキーを削除するとき、キーに値が設定されていてもエラーは出ませんでした
↑の書き方によるのかな?