Sprawdzenie podczas działania
Aby sprawdzić podczas działania programu/procedury, to czy jest on/ona uruchomiona w kontekście 32, czy 64-bitowym w czasach przed .NET 4.0 należało posłużyć się pewnym trikiem, a mianowicie (tak jak już to pokazywałem wcześniej), trzeba sprawdzić coś charakterystycznego dla platformy, np. rozmiar IntPtr, który na platformie x86 jest równy 4, natomiast na platformie x64 rozmiar ten wynosi 8, np.:String.Format( "IntPtr.Size={0}, Environment (proces) is x64: {1}", IntPtr.Size, IntPtr.Size == 8 );Dużo łatwiej natomiast zrobić to na platformie .NET 4.0. Tutaj klasa Environment została rozszerzona o nowe właściwości:
- Environment.Is64BitOperatingSystem
- zwraca prawdę, gdy wywołanie ma miejsce pod 64-bitowym systemem
operacyjnym
- Environment.Is64BitProcess - zwraca prawdę w przypadku, gdy proces jest 64bitowy.
Sprawdzenie assembly
Wiele ciekawych informacji znaleźć
można również ładując (lub wykorzystując już załadowane)
assembly. W szczególności przeglądając:
- AssemblyName,
- Moduły.
AssemblyName
W tym przypadku tworzymy nazwę assembly (var AssemblyName = AssemblyName.GetAssemblyName( FileName );), następnie interesująca jest właściwość: ProcessorArchitecture, która dostarcza typ architektury, odpowiednio:
Nazwa |
Opis |
|
---|---|---|
None
|
Nieznana lub niewyspecyfikowana kombinacja bitów dla
procesora.
|
|
MSIL
|
Naturalna (Any - CPU) |
|
X86
|
32-bitowy procesor, natywnie lub w środowisku Windows on
Windows (WOW) na platformie 64-bit.
|
|
IA64
|
Procesory Intel Itanium Architecture (wcześniej określane
mianem IA-64) |
|
Amd64
|
Procesory 64-bit AMD i zgodne (większość obecnych,
popularnych procesorów x64).
|
Moduły składowe Assembly
W tym przypadku możemy przejrzeć wszystkie moduły wchodzące w skład assembly:var MyAssembly = System.Reflection.Assembly.LoadFile( FileName ); Module[] modules = MyAssembly.GetModules();Następnie dla każdego modułu wywołać funkcję: Module.GetPEKind, by otrzymać informację na temat PortableExecutableKinds i ImageFileMachine.
UWAGA: w tym przypadku należy uważać, by aplikacja
32-bitowa nie próbowała załadować assembly 64-bitowego (i
odwrotnie), gdyż wtedy zobaczymy: „System.BadImageFormatException:
Could not load file or assembly ...”
UWAGA: To jak sprawdzić assembly i moduły pokazuje również
aplikacja AInfo
dołączona do projektu MPTS
(http://mpts.codeplex.com/).
Brak komentarzy:
Prześlij komentarz