如何以编程方式访问以在上下文菜单中添加新条目?
How to get programmatically access to add a new entry in Context Menu?
我会在上下文菜单中添加一个新条目 "Share",因此右键单击一个文件我会在上下文菜单中看到这个新条目 "Share"。我尝试了下面的代码,但是方法 CreateSubKey() 抛出异常 System.UnauthorizedAccessException 说 Denied Access to key 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 上它有所不同
如果您要添加到 HK_CLASSES_ROOT,您的应用程序必须 运行 提升权限。理想情况下,您应该保留对 HK_USERS 的任何更改,这些更改应该具有相同的子键
我认为您需要(本地?)管理员权限才能执行此操作。尝试以管理员身份执行您的应用程序。
如果这可行,您有两个选择:
方法一是需要 运行 您的应用程序的管理员权限 - 不是最好的主意。
方法二是第二个(命令行)项目,它只有一个目的,即创建这些注册表项。此应用程序需要管理员权限。您可以从您的主应用程序 运行 此应用程序 (Process.Start(...)
)。
要在您的应用程序中强制使用管理员权限,请将 app.manifest
/ 清单文件添加到您的 visual studio 项目并取消注释此行 <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 文件。重建。完成。
我会在上下文菜单中添加一个新条目 "Share",因此右键单击一个文件我会在上下文菜单中看到这个新条目 "Share"。我尝试了下面的代码,但是方法 CreateSubKey() 抛出异常 System.UnauthorizedAccessException 说 Denied Access to key 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 上它有所不同
如果您要添加到 HK_CLASSES_ROOT,您的应用程序必须 运行 提升权限。理想情况下,您应该保留对 HK_USERS 的任何更改,这些更改应该具有相同的子键
我认为您需要(本地?)管理员权限才能执行此操作。尝试以管理员身份执行您的应用程序。
如果这可行,您有两个选择:
方法一是需要 运行 您的应用程序的管理员权限 - 不是最好的主意。
方法二是第二个(命令行)项目,它只有一个目的,即创建这些注册表项。此应用程序需要管理员权限。您可以从您的主应用程序 运行 此应用程序 (Process.Start(...)
)。
要在您的应用程序中强制使用管理员权限,请将 app.manifest
/ 清单文件添加到您的 visual studio 项目并取消注释此行 <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 文件。重建。完成。