支持打包应用的旧上下文菜单
上下文菜单是最常用的有用 shell 扩展之一。 如果已在“文件资源管理器”中或桌面上,与打开单独的应用相比,它大大减少了完成文件操作的步骤数。
如果桌面应用为 shell 扩展(如上下文菜单处理程序或拖放处理程序)实现旧的 IContextMenu 接口,则打包应用后 shell 扩展可能无法正常工作。 为了使 shell 能够识别和注册扩展,需要修改包清单文件。 (此功能在 Windows 11 版本 22000+ 上提供,目前可通过 Windows 预览体验成员版本使用)
为 shellex dll 添加 com 命名空间和 windows.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 命名空间和 windows.fileExplorerClassicContextMenuHandler 或 windows.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。 有关详细信息,请参阅此文。