如何在Windows上下文菜单中为具有特定扩展名的文件添加条目?

如何在Windows上下文菜单中为具有特定扩展名的文件添加条目?,windows,registry,contextmenu,Windows,Registry,Contextmenu,我知道很多关于如何定制shell上下文菜单的问题都会被问到,但是我所做的尝试仍然不起作用,所以我添加了一个新问题 我希望在右键单击扩展名为“.Log”的文件时,在上下文菜单中添加一个条目“使用日志查看器打开”,以不更改与.Log文件(记事本)关联的默认应用程序,而是允许用户选择自定义应用程序来打开它们 为此,我打开了注册表项HKEY_CLASSES\u ROOT\.log,并添加了一些具有正确值的项shell\OpenWithLogViewer\command,但当我右键单击扩展名为.log的文

我知道很多关于如何定制shell上下文菜单的问题都会被问到,但是我所做的尝试仍然不起作用,所以我添加了一个新问题

我希望在右键单击扩展名为“.Log”的文件时,在上下文菜单中添加一个条目“使用日志查看器打开”,以不更改与.Log文件(记事本)关联的默认应用程序,而是允许用户选择自定义应用程序来打开它们

为此,我打开了注册表项
HKEY_CLASSES\u ROOT\.log
,并添加了一些具有正确值的项
shell\OpenWithLogViewer\command
,但当我右键单击扩展名为.log的文件时,不会显示该项

你知道怎么解决这个问题吗

HKEY_CLASSES\u ROOT\.log
具有默认值
txtfile
,并包含名为
PersistentHandler
的子键。此子项是否是问题的根源?

添加另一个注册表项(例如
HKEY\U CLASSES\U ROOT\logfile
),在该项下创建
shell
结构,并将
.log
项的默认值更改为
logfile
。一种方法是将以下行保存到
.reg
文件中,并将该文件合并到注册表中

Windows注册表编辑器5.00版
[HKEY_CLASSES_ROOT\.log]
@=“日志文件”
[HKEY_CLASSES_ROOT\logfile]
[HKEY\U CLASSES\U ROOT\logfile\shell]
@=“OpenWithLogViewer”
; 使OpenWithLogViewer成为默认操作
[HKEY\U CLASSES\U ROOT\logfile\shell\OpenWithLogViewer]
@=“使用日志查看器打开(&L)”
; 设置标签和访问密钥
[HKEY\U CLASSES\U ROOT\logfile\shell\OpenWithLogViewer\command]
@=“C:\\path\\to\\logviewer.exe\%1”
这将类型(
logfile
)与扩展名(
.log
)分开。这样,您就可以在一个位置定义类型的可能操作,并将任意扩展与该类型关联


请注意,您也可以使用
HKEY\U CURRENT\U user\Software\Classes
而不是
HKEY\U Classes\U ROOT
以每个用户为基础来定义这一点。用户条目优先于系统条目。当您想更改文件关联或为自己的用户添加自定义操作,但在系统上没有管理员权限时,此功能非常有用。

如果您想为您不“拥有”的文件扩展名添加条目,并且永远不想成为默认操作,则可以使用密钥:

要主动处理更改默认程序的后果,可以使用HKEY_CLASSES_ROOT\SystemFileAssociations注册动词和其他关联信息。由于它们在关联数组中位于ProgID之后,这些注册的优先级较低。这些SystemFileAssociationsregistrations即使在用户更改默认程序时也是稳定的,并提供一个位置来注册次要谓词,这些谓词将始终适用于特定的文件类型

此密钥在Windows XP及更高版本上可用

[HKEY_CLASSES_ROOT\SystemFileAssociations\.log\shell\mycommand]
@="My Command"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.log\shell\mycommand\command]
@="\"c:\\path\\myapp.exe\" \"%1\""