创建注册表项时出现UnauthorizedAccessException

时间:2012-04-06 10:14:24

标签: c# registry

我正在研究如何在Windows上下文菜单中将快捷方式添加到我的应用程序中。我看到了this文章,我试了一下。这是它用于在注册表中创建密钥的代码。

private void btnAddMenu_Click(object sender, System.EventArgs e)
{
    RegistryKey regmenu = null;
    RegistryKey regcmd = null;
    try
    {
        regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
        if(regmenu != null)
            regmenu.SetValue("",this.txtName.Text);
        regcmd = Registry.ClassesRoot.CreateSubKey(Command);
        if(regcmd != null)
                regcmd.SetValue("",this.txtPath.Text);
    }
    catch(Exception ex)
    {
        MessageBox.Show(this,ex.ToString());
    }
    finally       
    {
        if(regmenu != null)
            regmenu.Close();
        if(regcmd != null)
            regcmd.Close();
    }        
}

问题是,如果我通过管理员帐户运行它,它可以正常工作。但是,当我通过一个没有管理员权限的其他帐户执行此操作时,会抛出此异常。

system.unauthorizedaccessexception access to the registry key is denied

现在如果我在我自己的应用程序中使用此代码在上下文菜单中创建快捷方式,我不能确定每个用户都会以管理员身份运行它,对吗?

在创建注册表项时,C#中是否有任何方式升级用户权限?

如果您知道将项目添加到Windows上下文菜单的任何其他方式,我也会对它们感兴趣。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以像安装程序一样升级您的权限。这将需要用户互动,因为这是操作系统的设计方式(也是正确的) - 你不能绕过它。

答案 1 :(得分:2)

你不能这样升级权限(至少我想了解它,但现在似乎还不可能),但是你需要运行/启动你的应用程序(嵌入到清单中)提升。
请看一下这些条目......
How do I force my .NET application to run as administrator?
Elevating process privilege programatically?
我建议说什么评论,从设置中运行。或者让您的应用程序从一开始就以管理员身份运行,或者可能从您的应用程序中启动升级过程 - 在需要时(例如,运行您的另一个具有正确清单的exe)。