Добавление пункта контекстного меню в 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: отредактируйте реестр вручную
- добавить новый ключ в
HKEY_CLASSES_ROOT\SystemFileAssociations\.yourextension\shell\your menu entry text\command
создание любых ключей, которые вам нужны на этом пути (если нет ни одного для.yourextension
добавить это; если нет никого дляshell
добавить это; так далее) - установить значение по умолчанию для
command
(последний созданный вами ключ) кC:\path\to\yourapp.exe "%1"
Вариант 2: я сделал инструмент для этого
Вы можете скачать его здесь. Это пример того, как зарегистрировать notepad.exe в качестве пункта контекстного меню для файлов dll.
regwincontext.exe dll 'notepad it' C:\Windows\notepad.exe
Основные шаги для достижения этого заключаются в следующем:
- Зажечь
regedit
- Определите ProgID для вашего внутреннего номера - перейдите к
HKCR\.yourextension
и обратите внимание на значение по умолчанию (в вашем случае,dllfile
) - Перейдите к
HKCU\Software\Classes
(для пользователя) илиHKLM\Software\Classes
(для всех пользователей) - Ищите соответствующий ключ (в вашем случае
dllfile
) - если его там нет, создай его - Убедитесь, что у него есть подраздел
shell
- Добавить подраздел к
shell
названа как команда, которую вы хотите (см. изображение ниже) - Добавьте дополнительный ключ к вашему новому ключу под названием
command
- Изменить
(Default)
значение для команды, которую вы хотите выполнить.%1
даст вам путь к файлу в контексте (не забудьте обернуть его в"
из-за потенциальных пробелов в пути)
Похоже, вы сделали все вышеперечисленное, поэтому, возможно, вы делаете что-то не так, так как это мой результат после быстрого теста на вменяемость:
Итак, вот несколько вещей, которые я могу придумать, чтобы заставить их вести себя не интуитивно:
- Вы добавляете это к
HKLM
скорее, чемHKCU
- из-за того, как работает наследование, я верю, добавив его вHKLM
потребует перезагрузки или, в лучшем случае, перезагрузки оболочки - Вы добавили это в
HKCU
но ваша DLL требует повышенных разрешений для доступа - У вас где-то есть глупая синтаксическая ошибка;)
Пример команды, которую я использовал, чтобы проверить это был старый добрый скучный "C:\Windows\notepad.exe" "%1"