创建注册表项时出现UnauthorizedAccessException

我正在研究如何在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(); } } 

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

 system.unauthorizedaccessexception access to the registry key is denied 

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

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

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

谢谢。

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

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