8

我正在尝试将上下文菜单项添加到 DLL 文件中。原因是我编写了一个应用程序,该应用程序将托管 DLL 文件收回并部署到 GAC。该应用程序一切正常,但现在我希望能够右键单击 DLL,然后单击“复制到 GAC”。

我已尝试按照此问题的说明进行操作:如何将上下文菜单项添加到 Windows 资源管理器的文件夹但无济于事。当我右键单击一个 DLL 时,没有出现任何新内容。

我还尝试了以下方法:https://winaero.com/blog/add-register-dll-context-menu-commands-for-dll-files-in-windows-10/#comment-22928 - 运行 reg文件,但也没有结果。

也许对此类操作的 DLL 文件有硬编码限制?

这是我当前的注册表设置:

在此处输入图像描述

任何指导将不胜感激。

4

2 回答 2

11

实现此目的的一般步骤如下:

  1. 火起来regedit
  2. 确定您的扩展程序的 ProgID - 转到HKCR\.yourextension并记下默认值(在您的情况下,dllfile
  3. 导航到HKCU\Software\Classes(对于用户)或HKLM\Software\Classes(对于所有用户)
  4. 寻找一个匹配的键(在你的情况下dllfile) - 如果它不存在,创建它
  5. 确保它有一个名为shell
  6. 添加一个子键以shell命名为您想要的命令(参考下图)
  7. 将一个子密钥添加到您的新密钥,称为command
  8. 将值修改为(Default)您要执行的命令。%1将在上下文中为您提供文件的路径("由于路径中可能存在空白,请记住将其包装起来)

您似乎已经完成了上述所有操作,因此您可能做错了什么,因为这是我经过快速理智测试后的结果:

在此处输入图像描述

所以,我能想到的一些事情会让它表现得不直观:

  • 您将其添加到HKLM而不是HKCU-由于继承的工作原理,我确实相信将其添加到HKLM需要重新启动,或者充其量需要重新启动外壳程序
  • 您已将此添加到,HKCU但您的 dll 需要提升权限才能访问
  • 你在某处有一些愚蠢的语法错误;)

我用来测试的示例命令很无聊"C:\Windows\notepad.exe" "%1"

于 2018-02-07T07:42:31.550 回答
10

这是基于 andromeda947在此处的回答:

如果您有管理员权限,您可以使用HKEY_CLASSES_ROOT\SystemFileAssociations\.yourextension,这更简单,因为它不需要中间 ProgID。

选项 1:手动编辑注册表

  1. 在创建该路径中需要的任何键时添加一个新键HKEY_CLASSES_ROOT\SystemFileAssociations\.yourextension\shell\your menu entry text\command(如果没有一个用于.yourextension添加它;如果没有一个用于shell添加它;等等)
  2. command将(您创建的最后一个键)的默认值设置为C:\path\to\yourapp.exe "%1"

选项 2:我制作了一个工具来执行此操作

你可以在这里下载。这是一个如何将 notepad.exe 注册为 dll 文件的上下文菜单项的示例。

regwincontext.exe dll "notepad it" C:\Windows\notepad.exe
于 2019-12-17T08:16:05.277 回答