3

我试图在 Windows 8.1 中实现自定义 ShellExtension。发现了非常好的SharpShell 教程

[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
public class CountExtProvider : SharpContextMenu
{
    protected override bool CanShowMenu()
    {
        //  We will always show the menu.
        return true;
    }

    protected override ContextMenuStrip CreateMenu()
    {
        //  Create the menu strip.
        var menu = new ContextMenuStrip();

        //  Create a 'count lines' item.
        var itemCountLines = new ToolStripMenuItem
        {
            Text = "Count Lines"
        };

        //  When we click, we'll call the 'CountLines' function.
        itemCountLines.Click += (sender, args) => CountLines();

        //  Add the item to the context menu.
        menu.Items.Add(itemCountLines);

        //  Return the menu.
        return menu;
    }

    private void CountLines()
    {
        //  Builder for the output.
        var builder = new StringBuilder();

        //  Go through each file.
        foreach (var filePath in SelectedItemPaths)
        {
            //  Count the lines.
            builder.AppendLine(string.Format("{0} - {1} Lines",
              Path.GetFileName(filePath), File.ReadAllLines(filePath).Length));
        }

        //  Show the ouput.
        MessageBox.Show(builder.ToString());
    } 
}

我在Windows 8.1 RTM x64环境中,所以我在Visual Studio 2013 RC中将构建平台更改为 x64 。添加了一个密钥文件来签署我的 *.dll。但是如果我想注册我的 *.dll 什么都不会发生:

regasm ShellExtensions.dll

命令行显示注册成功,但在上下文菜单中没有条目。我在这里做错了什么?这不再适用于 Windows 8.1 吗?

4

1 回答 1

7

我在使用时遇到了同样的问题regasm.exe
此外,在通过regasm.
例如,您必须使用 regasm.exe 的 x64/x86 版本,具体取决于您的系统。

  • x64:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regAsm.exe
  • x86:C:\Windows\Microsoft.NET\Framework\v4.0.30319\regAsm.exe

在遇到这么多问题后,我切换到ServerManager.exe了 SharpShell 工具的一部分。它可以在项目页面上下载。
用法很简单:

  • 使用“加载服务器...”加载 DLL
  • 点击“安装服务器(xYZ)”
  • 然后在“注册服务器(xYZ)”上

重新启动 Windows 资源管理器,您应该完成(不一定需要)。

我完全同意上述教程作者的观点:

服务器管理器工具

服务器管理器工具是我首选的安装/卸载和注册/注销方法,至少在开发期间是这样,因为它允许您将安装和注册作为单独的步骤。它还可以让您指定是在 32 位还是 64 位模式下安装/卸载等。

于 2013-11-17T19:50:24.733 回答