Поделиться через


Поддержка устаревших контекстных меню для упакованных приложений

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

Если классическое приложение реализует устаревший интерфейс IContextMenu для расширений оболочки, таких как обработчик контекстного меню или обработчик перетаскивания, расширение оболочки может не работать после упаковки приложения. Чтобы оболочка распознала и регистрирует расширение, необходимо изменить файл манифеста пакета. (Эта функция доступна в windows 11 сборки 22000+, которая в настоящее время доступна через Сборки программы предварительной оценки Windows)

  • Добавление пространства имен com и расширения windows.comServer для библиотеки dll shellex

    xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"

    Ниже приведен пример фрагмента кода:

    <com:Extension Category="windows.comServer">
        <com:ComServer>
            <com:SurrogateServer DisplayName="<display-name-for-the-com-server>">
                <com:Class Id="<GUID-for-the-com-server>" Path="<path-to-the-com-server-or-dll>" ThreadingModel="STA" />
            </com:SurrogateServer>
        </com:ComServer>
    </com:Extension>
    
  • Добавление пространства имен desktop9 и файла windows.file Обозреватель ClassicContextMenuHandler или windows.file Обозреватель ClassicDragDropContextMenuHandler

    xmlns:desktop9="http://schemas.microsoft.com/appx/manifest/desktop/windows10/9"

    Ниже приведен пример фрагмента кода:

    <desktop9:Extension Category="windows.fileExplorerClassicContextMenuHandler">
        <desktop9:FileExplorerClassicContextMenuHandler>
            <desktop9:ExtensionHandler Type="*" Clsid="<GUID-for-the-com-server>" />
            <desktop9:ExtensionHandler Type=".txt" Clsid="<GUID-for-the-com-server>" />
            <desktop9:ExtensionHandler Type="Directory" Clsid="<GUID-for-the-com-server>" />
        </desktop9:FileExplorerClassicContextMenuHandler>
    </desktop9:Extension>
    
    <desktop9:Extension Category="windows.fileExplorerClassicDragDropContextMenuHandler">
        <desktop9:FileExplorerClassicDragDropContextMenuHandler>
            <desktop9:ExtensionHandler Type="Directory" Clsid="<GUID-for-the-com-server>" />
            <desktop9:ExtensionHandler Type="Drive" Clsid="<GUID-for-the-com-server>" />
        </desktop9:FileExplorerClassicDragDropContextMenuHandler>
    </desktop9:Extension>
    
  • Измените MaxVersionTested, чтобы было больше 10.0.21300.0

    Ниже приведен пример фрагмента кода:

    <Dependencies>
        <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.21301.0" />
    </Dependencies>
    

Примечание.

Если вы реализуете расширения оболочки вместо упаковки существующего классического приложения с устаревшей реализацией IContextMenu, мы рекомендуем реализовать интерфейс I Обозреватель Command и использовать desktop4:File Обозреватель ContextMenus. Дополнительные сведения см . здесь .