2008-12-01 21 views

Odpowiedz

6

Może to pomaga

od http://www.grimes.nildram.co.uk/dotnet/vistaAndDotnet.htm

Następnie, należy sprawdzić, czy jest to montaż .NET. Aby to zrobić, sprawdzam, czy plik zawiera nagłówek CLR. Ten nagłówek zawiera ważne informacje o lokalizacji kodu .NET w pliku i wersji architektury, która została użyta do napisania tego kodu. Lokalizacja tego nagłówka podana jest w tabeli Data Directory pliku. Jeśli pozycja katalogu danych ma wartości zerowe, to plik jest niezarządzany, jeśli ma wartości niezerowe, plik jest zbiorem .NET.

Możesz to sprawdzić samodzielnie, korzystając z narzędzia dumpbin z przełącznikiem/headers. To narzędzie wyświetli różne nagłówki w pliku w wierszu poleceń. Pod koniec Opcjonalnych wartości nagłówka zobaczysz listę katalogów danych (zawsze będzie ich 16), a jeśli katalog deskryptorów COM ma niezerową lokalizację, oznacza to, że plik jest zbiorem .NET. Zawartość nagłówka CLR może być również wymieniona przy użyciu przełącznika/clrheader (jeśli plik jest niezarządzany, nie będzie pokazywał żadnych wartości). Testy XP dla nagłówka CLR podczas wykonywania pliku i jeśli obecny jest nagłówek CLR, zainicjuje środowisko wykonawcze i przekaże punkt wejścia zespołu do środowiska wykonawczego, tak aby plik działał całkowicie w środowisku wykonawczym.

+0

Jest to pomocne, ale szukam programowego czeku. –

+0

Czy masz inny link? (bieżący link nie działa) – Fab

+0

@FabienBondi, zaktualizowano łącze – Stormenet

1

Pierwsze łącze będzie najszybszą i najprostszą metodą sprawdzenia (plik nagłówkowy PE). Masz rację zakładając, że wywołanie Assembly.ReflectionOnlyLoad będzie dość powolne.

5

W przeszłości używałem AssemblyName.GetAssemblyName(), która zgłasza wyjątek, jeśli nie jest zarządzanym złożeniem. Jednak nigdy nie testowałem wydajności, więc nie mogę powiedzieć, jak szybko to działa.

+2

Wyjątkiem jest System.BadImageFormatException –

7

Domyślam się, że odpowiedź Stormenet nie jest technicznie programowalna, więc podzielę moją odpowiedź na odpowiedź.

Aby uzyskać najlepszą wydajność, nic nie pobije otwarcia pliku (ów) za pomocą StreamReader, odczytywanie pierwszych (n) bajtów i sprawdzanie struktur danych podpisu plików .NET w strumieniu bajtów.

Prawie taki sam sposób chcesz sprawdzić coś jest wykonywalny DOS:

http://en.wikipedia.org/wiki/DOS_executable

szukać „MZ” bajtów nagłówka, które również zdarzyć się inicjały Mark Żbikowski, jeden z twórcy MS-DOS ..

Powiązane problemy