2017-10-12 155 views
0

我会在上下文菜单中添加一个新的条目“共享”,所以通过右键单击文件,我会在上下文菜单中看到这个新条目“共享”。我想在下面的代码,但方法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

我解决了probem运行一个单独的exe与设置密钥的管理员权限。这样的权利的请求只被要求一次@Michael –

回答

1

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

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

要强制管理,任何权限在应用程序中添加app.manifest /清单文件到您的Visual Studio项目,并取消注释该行<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

孔文件应该看起来像这样(有中应用多个默认项.manifest的视觉工作室为您生成)

<?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文件。重建。完成。

+0

在可能的情况下,应避免创建需要提升特权的应用程序。在这种情况下,添加到HK_USERS可能会更合适。 – DiskJunky

+1

@DiskJunky你说得对。我更新了我的文章:) – Michael

+0

@FedericoRizzo一些更多的细节将是很好的...你有什么尝试,发生了什么? – Michael

0

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

+0

谢谢。它的工作原理 –

+0

请稍等片刻。你确定用HK_USER我可以编辑上下文菜单吗? @DiskJunky –

+0

这篇文章有一个更详细的如何指导; https://stackoverflow.com/a/2124396/1838819 – DiskJunky

相关问题