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á en 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 de shell no funcione después de empaquetar la aplicación. Para que el shell reconozca y registre la extensión, deberá modificar el archivo de manifiesto del paquete. (Esta característica está disponible en Windows compilación 11 22000 y posteriores, que actualmente está disponible a través de Windows compilaciones de Insider).

  • Agregar espacio de nombres com y extensión windows.comServer para el archivo dll de 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>
    
  • Agregue 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>
    
  • Cambie 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 va a implementar extensiones de shell en lugar de empaquetar una aplicación de escritorio existente con una implementación IContextMenu heredada, se recomienda implementar la interfaz IExplorerCommand y usar desktop4:FileExplorerContextMenus en su lugar. Consulte aquí para obtener más información.