Добавьте этот PPA к своей системе:
https://launchpad.net / ~ kamalmostafa / + archive/dellxps
изменения, надо надеяться, в конечном счете превратят его в ядро архива Ubuntu, но на данный момент который включит вещи.
Проверьте заголовок PE:
Заголовок DOS начинается с 0x0, DWORD - с 0x3c содержит указатель на PE подпись (обычно 0x80), которая равна 4 байтов, следующие 20 байтов - это COFF заголовок, а затем заголовок PE (по адресу 0x9. Заголовок PE составляет 224 байта и содержит каталог данных (на 96 байтов в PE-заголовок = 0xf. В 15-я запись (0x16 - заголовок CLR дескриптор (иногда называемый COM дескриптор, но у него нет ничего общего с COM). Если это пустой (т.е. 0 в 8 байтах от 0x168 до 0x16f), то файл не является .NET сборка. Если вы хотите проверить, не это COM-DLL, тогда вам следует обратить внимание на посмотрите, экспортирует ли он GetClassObject.
ОБНОВЛЕНИЕ : есть более «.NET» способ сделать это:
Используйте метод Module.GetPEKind
и проверьте PortableExecutableKinds
Перечисление:
NotAPortableExecutableImage Файл не находится в переносимом исполняемом файле (PE) формат файла.
ILOnly Исполняемый файл содержит только промежуточный язык Microsoft (MSIL) и поэтому нейтрален с в отношении 32-битных или 64-битных платформ.
Required32Bit Исполняемый файл может быть запущен на 32-битной платформе или в 32-битная Windows в Windows (WOW) окружение на 64-битной платформе.
PE32Plus Исполняемый файл требует 64-битной платформы.
Unmanaged32Bit Исполняемый файл содержит чистый неуправляемый код.
Столкнувшись с той же проблемой в прошлом, я прибег к использованию вашего подхода отражения, потому что альтернативой является чтение вручную заголовок PE как это . Для моего сценария это показалось излишним, но оно может быть вам полезно.