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

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

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

  • Добавление пространства имен com и расширения Windows. комсервер для библиотеки DLL шеллекс

    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. Филиксплорерклассикконтекстменухандлер или Windows. Филиксплорерклассикдрагдропконтекстменухандлер

    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 , мы рекомендуем реализовать интерфейс иексплореркомманд и использовать вместо него desktop4: филиксплорерконтекстменус . Дополнительные сведения см. здесь .