Icon Handler показывает черные иконки

Я использую Sharpshell для изменения иконок в формате pdf и xlsx. В большинстве случаев он работает нормально, но иногда показывает черные значки. Обновление или перезапуск проводника на это не влияет.

Более того, он отлично работает в определенных представлениях значков - например, в "Подробности", "Содержимое" он работает нормально, но не в "Средних значках" или "Плитках". Кроме того, значки отлично работают в инструменте диспетчера сервера.

Есть еще одна вещь - если я изменю имя файла с черным значком, сразу появится правильный значок.

Это код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using SharpShell.SharpIconHandler;
using SharpShell.Attributes;
using SharpShell.Configuration;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using SharpShell.Diagnostics;
using SharpShell.Interop;

namespace IconHandlerTry2
{
    [ComVisible(true)]
    [COMServerAssociation(AssociationType.ClassOfExtension, ".pdf", ".xlsx")]
    public class Class1 : SharpIconHandler
    {
        /// <summary>
        /// Gets the icon.
        /// </summary>
        /// <param name="smallIcon">if set to <c>true</c> provide a small icon.</param>
        /// <param name="iconSize">Size of the icon.</param>
        /// <returns>
        /// The icon for the file.
        /// </returns>
        protected override Icon GetIcon(bool smallIcon, uint iconSize)
        {
            string prefix = "C:\\Windows\\IconsForYou\\";
            string filename = SelectedItemPath;
            string iconFileName;
            string[] splits = filename.Split('.');
            string extension = splits[splits.Length - 1];
            if (extension == "pdf")
                iconFileName = prefix + "pdfDefault.ico";
            else if (extension == "xlsx")
                iconFileName = prefix + "xlsxDefault.ico";
            else
                iconFileName = prefix + "default.ico";

            Icon icon = new Icon(iconFileName);
            //  Return the icon with the correct size. Use the SharpIconHandler 'GetIconSpecificSize'
            //  function to extract the icon of the required size.
            return GetIconSpecificSize(icon, new Size((int)iconSize, (int)iconSize));
        }
    }
}

Это более простая версия. Я буду работать над сотнями иконок. У кого-нибудь есть предложения?

РЕДАКТИРОВАТЬ: Теперь я вижу, что значки назначаются случайным образом. Всякий раз, когда я очищаю кэш значков, отображаются некоторые случайные значки. Иногда ничего нет, поэтому он становится либо полностью черным, либо белым. То же самое происходит в инструменте диспетчера сервера. Пожалуйста помоги!

0 ответов

Другие вопросы по тегам