Compatibilidad con menús contextuales heredados para aplicaciones empaquetadas

El menú contextual es una de las extensiones de shell más populares y útiles. Si ya estás en el Explorador de archivos o en el escritorio, reduce significativamente el número de pasos para completar una operación de archivo en comparación con la apertura de una aplicación independiente.

Si la aplicación de escritorio implementa la interfaz IContextMenu heredada para extensiones de shell, como el controlador de menú contextual o el controlador de arrastrar y colocar, es posible que la extensión del shell no funcione después de empaquetar la aplicación. Para que el shell reconozca y registre la extensión, deberás modificar el archivo de manifiesto del paquete. (Esta característica está disponible en la compilación 22000+ de Windows 11, que está disponible actualmente en las compilaciones de Windows Insider)

  • Adición del espacio de nombres com y la extensión windows.comServer para el archivo dll shellex

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

    A continuación se muestra un fragmento de código de ejemplo:

    <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>
    
  • Agrega el espacio de nombres desktop9 y la extensión windows.fileExplorerClassicContextMenuHandler o windows.fileExplorerClassicDragDropContextMenuHandler

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

    A continuación se muestra un fragmento de código de ejemplo:

    <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>
    
  • Cambia MaxVersionTested para que sea mayor que 10.0.21300.0

    A continuación se muestra un fragmento de código de ejemplo:

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

Nota:

Si vas a implementar extensiones de shell en lugar de empaquetar una aplicación de escritorio existente con la implementación heredada IContextMenu, se recomienda implementar la interfaz IExplorerCommand y usar desktop4:FileExplorerContextMenus en su lugar. Consulte aquí para obtener más información.