C# でレジストリ キーを削除する権限があるかどうかをプログラムに判断させようとしています。実際には、レジストリ キーに対する適切なアクセス許可がない場合に true を返すこのコードを試しています。
public static bool CanDeleteKey(RegistryKey key)
{
try
{
if (key.SubKeyCount > 0)
{
bool ret = false;
foreach (string subKey in key.GetSubKeyNames())
{
ret = CanDeleteKey(key.OpenSubKey(subKey));
if (!ret)
break;
}
return ret;
}
else
{
RegistryPermission r = new
RegistryPermission(RegistryPermissionAccess.AllAccess, key.ToString());
r.Demand();
return true;
}
}
catch (SecurityException)
{
return false;
}
}
この関数に渡すレジストリ キーはHKEY_CLASSES_ROOT\eHomeSchedulerService.TVThumbnailCache
. CLSID
フル コントロール アクセス許可は TrustedInstaller に対してのみ設定されているため、サブ キーに再帰して false を返す必要があります。
HKEY_CLASSES_ROOT\eHomeSchedulerService.TVThumbnailCache\CLSID
regedit から
のアクセス許可は次のとおりです。
管理者権限でコードを実行していることに注意してください。また、レジストリ キーを削除するときに try-catch ブロックを使用できることはわかっていますが、事前に削除できるかどうかを知りたいです。