支持打包应用程序的旧上下文菜单

上下文菜单是最常用且最有用的 shell 扩展之一。 如果已在文件资源管理器或桌面上,则与打开单独的应用相比,它可以显著减少完成文件操作所要完成的步骤数。

如果桌面应用程序为外壳扩展(如上下文菜单处理程序或拖放处理程序)实现了旧的 IContextMenu 接口,则在打包应用程序后,shell 扩展可能不起作用。 为了使 shell 识别和注册扩展,需要修改包清单文件。 (此功能在 Windows 11 生成 22000 + 上可用,该版本当前可通过Windows 内部版本获取)

  • 为 shellex dll 添加 com 命名空间和comServer 扩展

    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 命名空间和 fileExplorerClassicContextMenuHandler 或 fileExplorerClassicDragDropContextMenuHandler 扩展

    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>
    

注意

如果要实现 shell 扩展,而不是使用旧的 IContextMenu 实现打包现有的桌面应用程序,我们建议实现 IExplorerCommand 接口并改用 desktop4: FileExplorerContextMenus 。 有关详细信息,请参阅 此处