如何通过编程方式访问在上下文菜单中添加新条目?

时间:2017-10-12 14:30:34

标签: c# visual-studio c#-4.0 .net-4.0 registry

我会在上下文菜单中添加一个新条目“分享”,所以右键单击一个文件我会在上下文菜单中看到这个新条目“分享”。我尝试在下面的代码中,但方法CreateSubKey()抛出异常System.UnauthorizedAccessException说拒绝访问键HKEY_CLASSES_ROOT

const string MenuName = "*\\shell\\NewMenuOption";
const string Command = "*\\shell\\NewMenuOption\\command";
RegistryKey key = null;
key = Registry.ClassesRoot.CreateSubKey(MenuName, RegistryKeyPermissionCheck.ReadWriteSubTree); 
key = Registry.ClassesRoot.CreateSubKey(Command, RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("Share", ObjectToStore);

我在guide上看到了一些内容,但我认为在.NET2.0上它是不同的

2 个答案:

答案 0 :(得分:1)

我认为您需要(本地?)管理员权限。尝试以管理员身份执行您的应用 如果这有效,您有两种选择:

方法一是要求管理员权限来运行您的应用程序 - 不是最好的主意 方法二是第二个(命令行)项目,它只有一个目的,创建那些注册表项。此应用需要管理员权限。您可以从主应用程序运行此应用程序(Process.Start(...))。

要在您的应用程序中强制执行admin-permissons,请在Visual Studio项目中添加app.manifest / manifest-file并取消注释此行<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

孔文件应该看起来像这样(app.manifest visual studio中有更多默认条目为您生成)

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
        <!-- <requestedExecutionLevel  level="highestAvailable" uiAccess="false" /> -->
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

然后转到项目设置,应用程序,并在清单下的较低屏幕中选择您的app.manifest文件。重建。完成。

答案 1 :(得分:0)

如果您要添加到HK_CLASSES_ROOT,您的应用程序必须以提升的权限运行。理想情况下,您应该对HK_USERS保留任何应该具有相同子键的更改