0

SharpShell を使用して c# で IconHandler シェル拡張を作成しています。これが私の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 をデスクトップに移動しました。次に、管理者としてコマンドプロンプトで次のコマンドを使用して、dll で regasm を実行しました。

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)

レジストリに何か問題があるようです。

4

1 に答える 1

0

レジストリのエントリは次のようになります。

HKEY_CLASSES_ROOT
jxe_auto_file
DefaultIcon: (デフォルト) (アイコンへのパス)

jxe_auto_file エントリに「DefaultIcon」がなかったと確信しています

于 2015-01-20T13:05:40.207 に答える