EugeneRoshal
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору KonstantinPolyakov Детали реализации я вам могу отправить по email, если напишите мне на dev@rarlab.com Но я пока до конца не уверен, что оставлю этот вариант. Проблема в том, что если мы используем только IExplorerCommand, часть установленных Windows 11 отображает их только в новом, но не старом меню. Насколько это распространено - мне сложно сказать, но у меня сейчас есть две виртуальные машины с Windows 11, в одной из которых WinRAR'овские пункты на основе IExplorerCommand есть в старом меню, а в другой - нет. При этом, если мы реализуем IContextMenu, оно присутствует в старом меню в обеих установках Windows 11. И есть сторонние файловые менеджеры, которые поддерживают только IContextMenu (Directory Opus), а есть, которые поддерживают оба интерфейса (Total Commander). Сейчас я повесил включение IContextMenu на "Legacy context menus" в настройках WinRAR. То есть, если у пользователя нет пунктов WinRAR в старом меню Windows 11 или в стороннем менеджере, ему нужно включить эту опцию. Если же он включает ее только ради менеджера, а в старом меню пункты присутствуют, то в старом меню получим двойной набор пунктов WinRAR. Есть альтернативный вариант реализации. Shell extension на основе косвенных признаков может попытаться определить, когда Windows запрашивает пункты IExplorerCommand для старого меню, а когда для нового, и отдавать их только для нового меню. Для старого же всегда регистрировать IContextMenu. Плюс этого подхода в том, что пользователю не надо включать "Legacy context menus", о чем еще не каждый догадается. Пункты WinRAR будут присутствовать и в старом меню, и в сторонних менеджерах. Минус - в менеджерах типа Total Commander, поддерживающих оба интерфейса, будет присутствовать удвоенный набор команд WinRAR. И еще минус: так как определение старого меню в rarext.dll будет выполняться на основе шаблонов поведения dllhost.exe, если в будущем это поведение изменится, есть риск, что отвалится поддержка и нового меню, то есть WinRAR ошибочно примет его за старое. То есть, в первом варианте у нас беспроблемная поддержка нового меню Windows 11, но для включения WinRAR в старом и в некоторых файловых менеджерах пользователю может понадобиться залезть в настройки и включить "Legacy context menus". И если включали только ради менеджера, есть риск дублирования в старом меню Windows. Во втором варианте в нынешней версии Windows 11 команды WinRAR присутствуют в обеих меню без каких-либо опций, но с некоторым риском, что в будущих обновлениях Windows может отвалиться даже поддержка нового меню и придется экстренно выпускать новую версию WinRAR. В файловых менеджерах тоже все работает без опций, но в некоторых (TC) команды WinRAR дублируются. Сейчас я реализовал первый вариант, но и второй окончательно из рассмотрения еще не вычеркнул. |