我会在上下文菜单中添加一个新条目“分享”,所以右键单击一个文件我会在上下文菜单中看到这个新条目“分享”。我尝试在下面的代码中,但方法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上它是不同的
答案 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保留任何应该具有相同子键的更改