You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"下方的图标引用。

当前问题

  1. Win11切换到经典右键菜单后依然无效,已两次清理相关注册表并重新执行regasm,问题依旧,是否需要重启系统?
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:06:12