Question

I tried to implement a custom ShellExtension in Windows 8.1. Found that really good SharpShell tutorial.

[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());
    } 
}

I am in a Windows 8.1 RTM x64 environment, so I changed my build plattform to x64 in Visual Studio 2013 RC. Added a Key-File to sign my *.dll. But if I want to register my *.dll nothing happends:

regasm ShellExtensions.dll

The command line says registering was successful but in the context menu there is no entry. What I am doing wrong here? Does this work with Windows 8.1 no more?

Was it helpful?

Solution

I had the same problem while using regasm.exe.
Furthermore there are many things to mention when registering an assembly through regasm.
For example you have to use the x64/x86 version of the regasm.exe, depending on your system.

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

After having so many problems, I switched to the ServerManager.exe, which is part of the SharpShell Tools. It can be downloaded on the project page.
The usage is quite easy:

  • Load the DLL with "Load server..."
  • Click on "Install Server (xYZ)"
  • And after that on "Register Server (xYZ)"

Restart the Windows Explorer and you should be done (not necessarily needed).

I fully agree with the point of the author of the mentioned tutorial:

The Server Manager Tool

The Server Manager Tool is my preferred approach for installing/uninstalling and registering/unregistering, at least during development, because it lets you install and register as separate steps. It will also let you specify whether you're installing/uninstalling etc in 32 bit or 64 bit mode.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top