Я создаю расширение оболочки IconHandler в С#, используя SharpShell. Вот код моей dll.
using SharpShell.Attributes;
using SharpShell.SharpIconHandler;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace DllIconHandler
{
[ComVisible(true)]
[COMServerAssocation(AssociationType.ClassOfExtension, ".jxe")]
public class DllIconHandler : SharpIconHandler
{
protected override Icon GetIcon(bool smallIcon, uint iconSize)
{
Icon icon = null;
FileInfo file = new FileInfo(SelectedItemPath);
long size = file.Length;
if (size > 0)
{
icon = new Icon("C:\\Users\\Owner\\Desktop\\icon1.ico");
}
else
{
icon = new Icon("C:\\Users\\Owner\\Desktop\\icon2.ico");
}
return GetIconSpecificSize(icon, new Size((int)iconSize, (int)iconSize));
}
}
}
Я встроил это в dll и перенес dll на свой рабочий стол. Затем я запустил regasm в dll, используя следующие команды в командной строке от имени администратора.
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe C:\Users\Owner\Desktop\DllIconHandler.dll /codebase
Но когда я это делаю, появляется ошибка
RegAsm : error RA0000 : An error occurred inside the user defined Register/Unreg
ister functions: System.InvalidOperationException: Cannot open default icon key
for class jxe_auto_file
at SharpShell.ServerRegistration.ServerRegistrationManager.SetIconHandlerDefa
ultIcon(RegistryKey classesKey, String className)
at SharpShell.ServerRegistration.ServerRegistrationManager.RegisterServerAsso
ciations(Guid serverClsid, ServerType serverType, String serverName, Association
Type associationType, IEnumerable`1 associations, RegistrationType registrationT
ype)
at SharpShell.SharpShellServer.DoRegister(Type type, RegistrationType registr
ationType)
Похоже, что-то не так в реестре.