C# 如何检查我是否有权限写入注册表项

C# 如何检查我是否有权限写入注册表项,c#,error-handling,registry,C#,Error Handling,Registry,在C#中,如何检查我是否有写入注册表项的权限 我试图在注册表项中存储一个值: try { using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Contoso\SQMClient", true)) { if (key != null) key.SetValue("UserId", sUserId); } } catch (System.Security.S

在C#中,如何检查我是否有写入注册表项的权限


我试图在注册表项中存储一个值:

try
{
    using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Contoso\SQMClient", true))
    {
       if (key != null)
          key.SetValue("UserId", sUserId);
    }
}
catch (System.Security.SecurityException e)
{
   //Not allowed to set UserId. No biggie.
}
除了
OpenSubKey
引发异常之外:

System.Security.SecurityException occurred
   HResult=-2146233078
   Message=Requested registry access is not allowed.
我不想故意抛出异常。在尝试在中打开之前,如何验证对注册表项的权限;为了防止抛出异常


注意:它可能涉及,也可能不涉及。这也可能是不可能的。

我很确定如果您无法读取密钥本身,则
GetAccessControl
会引发异常,但您可以使用它检查您是否具有写入权限。签出尝试打开密钥并捕获异常似乎是最简单、最合适的方法。它当然避免了任何可能的比赛条件。而且性能成本可能是无关的;您只打开密钥一次,因此只捕获一个异常。另外,这段代码可能是用户操作的结果,用户在计算机方面的速度很慢。