none
c# 开发的程序,以普通用户的身份运行,访问注册表抛出异常。如何以普通用户身份读写注册表? RRS feed

  • 问题

  • RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);
    的时候抛出异常了。
    异常为 System.Security.SecurityException: 不允许所请求的注册表访问权

    /**/
            /// <summary>
            /// 判断指定注册表项是否存在
            /// </summary>
            /// <param></param>
            /// <returns></returns>
            public static bool IsExist(string strName)
            {
                try
                {
                    bool exit = false;
                    string[] subkeyNames;
                    RegistryKey hkml = Registry.LocalMachine;
                    RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);
                    RegistryKey aimdir = software.OpenSubKey("MySoftware", true);
                    subkeyNames = aimdir.GetValueNames();
                    foreach (string keyName in subkeyNames)
                    {
                        if (keyName == strName)
                        {
                            exit = true;
                            return exit;
                        }
                    }
                    return exit;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return false;
                }
            }
    2011年11月3日 8:16

答案

  • Hi VCResearch,

    关于windows注册表权限的说明已经相应措施请看这篇官方知识库:
    http://support.microsoft.com/kb/310426.

    另外如果你的系统版本是Vista或者Windows7的话, Vista之后的系统多了一项新功能UAC, 在预设情况下即使登陆的账号拥有Administrator权限, 但为了安全性考量, 执行时UAC机制不会用Administrator来执行, 所以有些操作系统资源的程序会被UAC阻挡.
    可以试试以管理员身份运行VS IDE然后再调试, 或者如果你是直接打开的executable运行的话请右键点击然后选择"以管理员身份运行".

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 VCResearch 2011年11月5日 16:05
    2011年11月4日 5:41
    版主

全部回复

  • 用户权限不够呀

    当前用户可以用regedit改注册表吗?


    http://feiyun0112.cnblogs.com/
    2011年11月3日 9:04
    版主
  • 既然是检测是否存在,为什么需要写访问权限呢?
    我也有自己的签名档哦!
    2011年11月4日 1:49
  • Hi VCResearch,

    关于windows注册表权限的说明已经相应措施请看这篇官方知识库:
    http://support.microsoft.com/kb/310426.

    另外如果你的系统版本是Vista或者Windows7的话, Vista之后的系统多了一项新功能UAC, 在预设情况下即使登陆的账号拥有Administrator权限, 但为了安全性考量, 执行时UAC机制不会用Administrator来执行, 所以有些操作系统资源的程序会被UAC阻挡.
    可以试试以管理员身份运行VS IDE然后再调试, 或者如果你是直接打开的executable运行的话请右键点击然后选择"以管理员身份运行".

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 VCResearch 2011年11月5日 16:05
    2011年11月4日 5:41
    版主
  • 如用户是 Normal User,非 Administrators 成员,或者 Administrator 账户。那么需要在注册表添加该用户的权限才可以访问。

    用管理员运行 regedit,然后右键单击需要授权的注册表项,选择 Security 来添加/更改权限。


    Mark Zhou
    2011年11月4日 9:23