4

我正在研究如何在我的应用程序中添加 Windows 上下文菜单中的快捷方式。我偶然发现了这篇文章并尝试了它。这是它用于在注册表中创建密钥的代码。

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 上下文菜单的任何其他方式,我也会对它们感兴趣。

谢谢你。

4

2 回答 2

2

你不能像这样升级权限(至少我想知道它,但似乎还不可能),但你需要运行/启动你的应用程序(嵌入清单)提升。
请查看这些条目...
如何强制我的 .NET 应用程序以管理员身份运行?
以编程方式提升进程特权?
我会建议评论所说的,从设置中运行。或者让您的应用从一开始就以管理员身份运行,或者可能在需要时从您的应用中快速启动提升的进程(例如,运行您的另一个具有正确清单的 exe)。

于 2012-04-06T11:41:47.190 回答
2

您可以像安装程序一样升级您的权限。这将需要用户交互,因为这就是操作系统的设计方式(而且是正确的)——你无法绕过它。

于 2012-04-06T10:22:45.303 回答