Icon.ExtractAssociatedIcon возвращает стандартную иконку
Пытаюсь реализовать что-то вроде диспетчера задач. При чтении иконок процессов с помощью Icon.ExtractAssociatedIcon(process.MainModule.FileName).ToBitmap(), метод вернет стандартную иконку. При записи Icon.ExtractAssociatedIcon(@"F:\\opera\\72.0.3815.454\\opera.exe").ToBitmap() метод возвращает корректную иконку (в отладчике проверил, строки пути совпадают).
Исходный код метода:
private void GetProcessList()
{
processList = Process.GetProcesses();
listView1.Items.Clear();
int i = 0;
Bitmap bmp = default;
Bitmap emptyImage = new Bitmap(32, 32);
foreach (var process in processList)
{
try
{
// возвращает стандартную иконку
bmp = new Bitmap(Icon.ExtractAssociatedIcon(process.MainModule.FileName).ToBitmap());
bmp.Save(@"D:\f.ico");
//возвращает корректную иконку
Bitmap bmp2 = new Bitmap(Icon.ExtractAssociatedIcon(@"F:\\opera\\72.0.3815.454\\opera.exe").ToBitmap());
bmp2.Save(@"D:\f2.ico");
}
catch (Win32Exception ex)
{
using (Graphics g = Graphics.FromImage(emptyImage))
{
g.Clear(Color.White);
}
}
catch (InvalidOperationException exp)
{
}
ImageList imageList = default;
imageList.ImageSize = new Size(32, 32);
if (bmp.Width != 0)
imageList.Images.Add(bmp);
else
imageList.Images.Add(emptyImage);
listView1.SmallImageList = imageList;
ListViewItem listViewItem = new ListViewItem(new string[] {"",process.ProcessName});
listViewItem.ImageIndex = i;
listView1.Items.Add(listViewItem);
}
}