如何从Exe或DLL字节数组/内存流中提取图标?

时间:2015-08-17 09:57:17

标签: c# dll icons exe extract

我需要直接从.exe和.dll文件流中获取图标,而不需要临时文件。

此文件流是从MSI包“Icon”表中获得的。

我能够使用以下代码从MSI包“Icon”表中成功从“.ico”文件流中提取Icon:

public static Icon BytesToIcon(byte[] bytes)
{
    using (MemoryStream ms = new MemoryStream(bytes))
    {
     return new Icon(ms);
    }
}

但我不知道如何直接从.exe和.dll文件流中读取图标。请帮我看看正确的方向。

问题是关于从Byte [] fileStream中读取图标。 没有档案。目标是从该流中读取没有临时文件的图标。

其他类似的问题是关于“Icon.ExtractAssociatedIcon(filePath)” 它不适合我,因为没有文件路径。

这不是重复,因为主持人的错误,类似的问题被标记为重复。

更新: 主持人“L.B”错误地将 My question标记为“重复”。主持人没有检查更新的问题,我澄清了“为什么它实际上不是”重复。不幸的是,网站不允许与用户联系,并且在问题被他人自己的想法标记为重复之后 - 问题将被破坏而没有上诉机会。

1 个答案:

答案 0 :(得分:-1)

我找到了一个project library来完成我所要求的一切。 该库具有将.exe / .dll加载为内存流的方法。 我可以将byte []数组转换为内存流对象,如下所示:

MemoryStream stream = new MemoryStream(myByteArray);

//and then load that MemoryStream with IconLib Load method:

MultiIcon multiIcon = new MultiIcon();
multiIcon.Load(stream)

//Iterate through different resolution icons under index 0
List<Icon> iconList = new List<Icon>();
foreach(IconImage iconImage in multiIcon[0])
{
 iconList.Add iconImage.Icon
}