Добавление пункта контекстного меню в Windows для определенного расширения файла

Я пытаюсь добавить пункт контекстного меню в файл DLL. Причина в том, что я написал приложение, которое убирает и развернул управляемый файл DLL в GAC. Приложение все хорошо, но теперь я хочу иметь возможность щелкнуть правой кнопкой мыши DLL и просто нажать "Копировать в GAC".

Я пытался следовать инструкциям по этому вопросу: Как добавить пункт контекстного меню в Windows Explorer для папок, но безрезультатно. Когда я щелкаю правой кнопкой мыши по DLL, ничего нового не появляется.

Я также попробовал следующее: https://winaero.com/blog/add-register-dll-context-menu-commands-for-dll-files-in-windows-10/ - запустил рег файл, но безрезультатно.

Может быть, есть жесткое ограничение на DLL-файлы для таких действий?

Вот мои текущие настройки реестра:

введите описание изображения здесь

Любое руководство будет оценено.

1 ответ

Это основано на ответе 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

Основные шаги для достижения этого заключаются в следующем:

  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"

Другие вопросы по тегам