C# Windows 8特定文件类型上下文菜单关联

C# Windows 8特定文件类型上下文菜单关联,c#,windows-8,registry,contextmenu,file-type,C#,Windows 8,Registry,Contextmenu,File Type,需要将项添加到特定文件类型的上下文菜单中。在Windows 7和以前的版本中,通过添加 HKEY_CLASSES_ROOT\<extension>\shell\<commandname>\command HKEY\u CLASSES\u ROOT\\shell\\command 具有值的键 @="<path_to_app> \"%1\"" @=“\%1” 注册。 在Windows8中,这不起作用。即使删除了相应类型的PersistentHandler键

需要将项添加到特定文件类型的上下文菜单中。在Windows 7和以前的版本中,通过添加

HKEY_CLASSES_ROOT\<extension>\shell\<commandname>\command
HKEY\u CLASSES\u ROOT\\shell\\command
具有值的键

@="<path_to_app> \"%1\""
@=“\%1”
注册。 在Windows8中,这不起作用。即使删除了相应类型的PersistentHandler键:

有趣的是,如果shell/命令键写在
HKEY\U CLASSES\U ROOT\*\
部分,上下文菜单项会按预期出现在所有文件的菜单中,但如果我只需要将应用程序添加到2-3个文件类型,而不破坏任何现有关联,这将是一个巨大的开销。
我使用C#中的Microsoft.Win32.Registry.ClassesRoot来实现此逻辑,但问题肯定不在代码中,因为a)它在Windows 7中工作b)在Windows 8中使用管理员权限进行手动编辑并没有添加所需的关联。

您一定注意到原来没有“shell”键,即使.avi文件肯定有一个打开的上下文菜单项。还有一个额外的间接级别,请注意.avi键的默认值。这是与.avi文件扩展名关联的ProgId


按照WMP11.AssocFile.AVI键查找shell命令,将您的命令添加到那里。

您一定注意到那里原来没有“shell”键,即使.AVI文件肯定有一个打开的上下文菜单项。还有一个额外的间接级别,请注意.avi键的默认值。这是与.avi文件扩展名关联的ProgId


按照WMP11.AssocFile.AVI键查找shell命令,将命令添加到其中。

“HKEY\U CLASSES\U ROOT\SystemFileAssociations\video”是非WMP默认媒体播放器系统中.AVI文件的“真实”子树。我感兴趣的mkv文件类型还创建了另一个子树——“mkv_auto_file”。我不知道为什么要这么做,也不知道记录在哪里,但我的问题解决了。感谢Hans的指导。

“HKEY_CLASSES_ROOT\SystemFileAssociations\video”是非WMP默认媒体播放器系统中.avi文件的“真实”子树。我感兴趣的mkv文件类型还创建了另一个子树——“mkv_auto_file”。我不知道为什么要这么做,也不知道记录在哪里,但我的问题解决了。感谢Hans的指导。

在空白虚拟机上测试,似乎正常工作。本以为问题已解决,但随后在工作机器上测试失败,因为还有另一个应用程序与所需类型关联,WMP11.AssocFile.AVI也没有效果。将尝试HKEY_CLASSES_ROOT\SystemFileAssociations\video并查看其效果。在空白虚拟机上测试,似乎可以正常工作。本以为问题已解决,但随后在工作机器上测试失败,因为还有另一个应用程序与所需类型关联,WMP11.AssocFile.AVI也没有效果。将尝试HKEY\U CLASSES\U ROOT\SystemFileAssociations\video并查看其效果。