Win10/Win11下SharpShell扩展菜单项不显示的排查求助
使用SharpShell开发Shell扩展菜单不显示的问题
我用SharpShell.dll v2.7.2开发Shell扩展右键菜单,仅修改了类名、方法名等少量内容,编译正常且regasm注册提示成功,但Win10/Win11中均无法看到该扩展菜单项。
我的代码
using System; using System.Text; using System.Runtime.InteropServices; using System.IO; using System.Windows.Forms; using SharpShell.Attributes; using SharpShell.SharpContextMenu; namespace AcmeFileSender { [ComVisible(true)] [COMServerAssociation(AssociationType.ClassOfExtension, ".*")] public class UploadFileExtension : SharpContextMenu { protected override bool CanShowMenu() { // 始终显示菜单 return true; } protected override ContextMenuStrip CreateMenu() { // 创建菜单条 var menu = new ContextMenuStrip(); // 创建"上传文件"菜单项 var itemCountLines = new ToolStripMenuItem { Text = "Upload file" }; // 点击时执行上传逻辑 itemCountLines.Click += (sender, args) => UploadFiles(); // 将菜单项添加到右键菜单 menu.Items.Add(itemCountLines); // 返回菜单 return menu; } private void UploadFiles() { // 构建输出内容 var builder = new StringBuilder(); // 遍历选中的每个文件 foreach(var filePath in SelectedItemPaths) { // 统计文件行数并添加到输出 builder.AppendLine(string.Format("{0} - {1} Lines", Path.GetFileName(filePath), File.ReadAllLines(filePath).Length)); } // 显示结果 MessageBox.Show(builder.ToString()); } } }
代码说明
- 用
.*替换教程中的.txt,希望对所有文件生效; - 因编译问题,移除了
Text = "Upload file"下方的图标引用。
当前问题
- Win11切换到经典右键菜单后依然无效,已两次清理相关注册表并重新执行regasm,问题依旧,是否需要重启系统?
- 在Server Manager中加载该DLL时显示:
- 64位服务器未安装;
- 32位和64位服务器均显示未注册,但regasm明明提示“Types registered successfully”。
请问我哪里操作有误?如何让“Upload file”菜单项在Win10/Win11的文件右键菜单中显示?
解决方案
1. 核心注册问题:区分32/64位regasm工具
Win10/Win11为64位系统,必须对应位数的regasm工具分别注册,且必须带/codebase参数:
- 32位regasm路径:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe - 64位regasm路径:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe - 管理员身份执行注册命令示例:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe "你的DLL完整路径" /codebase /tlb
2. Server Manager提示异常原因
- 仅注册了单一位数版本,或注册时未添加
/codebase参数,导致Shell无法定位DLL; - 清理注册表后未刷新Shell缓存,需重启资源管理器而非系统。
3. 无需重启系统,只需重启资源管理器
- 打开任务管理器,找到“Windows资源管理器”右键选择“重启”;
- 或执行命令:
taskkill /f /im explorer.exe && start explorer.exe
4. 额外检查项
- 确认项目编译目标平台为
Any CPU,或分别编译x86/x64版本并对应注册; - 打开注册表编辑器,导航到
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers,检查是否存在你的扩展CLSID项,无则说明注册失败; - 测试时需选中文件(你的扩展关联所有文件),桌面空白处为文件夹上下文,不会触发;
- 确保SharpShell.dll版本与项目.NET Framework版本兼容,v2.7.2建议使用4.6及以上版本。
内容的提问来源于stack exchange,提问作者HerrimanCoder
相关产品推荐
相关产品推荐

