none
下面代码抛出异常,请问如何解决 RRS feed

  • 问题

  • RegistryKey root = Registry.ClassesRoot;//root key

                    //change extendname link
                    root.CreateSubKey(ExName);
                    root.DeleteSubKeyTree(ExName); //在这里抛出异常 试图执行未经授权的操作

    请问如何解决?

    谢谢。

    2013年9月23日 13:54

答案

  • 你好:

    这个问题的原因是你当前的用户没有访问这个新创建的SubKey的权限,好像默认新创建的注册表项继承了父项的访问权限。在你的代码中父项就是"ClassesRoot"。

    这里给你一个解决方案:

    1. 用一个管理员权限的账户登录这台机器。开始>运行,输入regedt32打开注册表编辑器。

    2. 右击HKEY_CLASSES_ROOT,选择Permissions

    3. 点击Advanced(高级),双击你要赋予权限的账户,在Basic Permissions(基本权限)下选择Full Control(完全控制),并且将下方的复选框勾上,最后点击确定。

    然后再试一下你的代码看看是不是已经可以创建并且删除注册表项了呢。


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月24日 3:17
    版主

全部回复

  • 你好:

    这个问题的原因是你当前的用户没有访问这个新创建的SubKey的权限,好像默认新创建的注册表项继承了父项的访问权限。在你的代码中父项就是"ClassesRoot"。

    这里给你一个解决方案:

    1. 用一个管理员权限的账户登录这台机器。开始>运行,输入regedt32打开注册表编辑器。

    2. 右击HKEY_CLASSES_ROOT,选择Permissions

    3. 点击Advanced(高级),双击你要赋予权限的账户,在Basic Permissions(基本权限)下选择Full Control(完全控制),并且将下方的复选框勾上,最后点击确定。

    然后再试一下你的代码看看是不是已经可以创建并且删除注册表项了呢。


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月24日 3:17
    版主
  • 你好:

    这个问题的原因是你当前的用户没有访问这个新创建的SubKey的权限,好像默认新创建的注册表项继承了父项的访问权限。在你的代码中父项就是"ClassesRoot"。

    这里给你一个解决方案:

    1. 用一个管理员权限的账户登录这台机器。开始>运行,输入regedt32打开注册表编辑器。

    2. 右击HKEY_CLASSES_ROOT,选择Permissions

    3. 点击Advanced(高级),双击你要赋予权限的账户,在Basic Permissions(基本权限)下选择Full Control(完全控制),并且将下方的复选框勾上,最后点击确定。

    然后再试一下你的代码看看是不是已经可以创建并且删除注册表项了呢。


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

     如果将vs2010以管理员身份启动,之后运行本程序。

    是否可以正常呢?

    2013年9月24日 6:23
  • 管理员身份也是不行的,我刚测试的时候就是使用的管理员登陆的,测试的时候报Access Denied,按照我给你回复的方法做了之后,就不会报错了。

    好像默认管理员身份也是不可以直接添加删除HKEY_CLASSES_ROOT下面的注册表选项的。

    你自己测试一下就知道了,自己的测试环境自己最清楚。

    对注册表进行编程的时候要特别注意,有一些比较危险的操作可能会导致系统出现问题。不到万不得已尽量别操作注册表。


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.



    2013年9月24日 6:42
    版主