NET Framework ottenere esecuzione architettura del processore
-
16-09-2019 - |
Domanda
C'è un enumerazione di tutte le architetture di processore supportate qui: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx
C'è un modo per determinare quale corrisponde l'ambiente in esecuzione? . System.Reflection.Assembly.GetExecutingAssembly () ritorna ProcessorArchitecture MSIL -. Ovviamente sbagliato
EDIT: Bojan Resnik ha postato una risposta e ha cancellato. Vedo che qualche chiarimento è necessario dalla traccia parziale che ho ottenuto.
Il montaggio deve essere eseguito su più architetture e fare cose diverse in base a ciò le istruzioni di montaggio il processo in esecuzione accetta. In sostanza, ho bisogno di selezionare quale versione di una DLL nativa per caricare. Ho uno per ogni architettura.
Soluzione
P / Invocare GetSystemInfo è banale da .Net ed è molto più leggero peso rispetto WMI. Inoltre, restituisce l'architettura come si è visto dal processo così su una macchina x64 un processo WOW vedrà x86 e un processo nativo vedrà x64.
Altri suggerimenti
Ecco alcune impostazioni WMI si consiglia di provare. Non ho un sistema a 64 bit a portata di mano al momento, ma dovrebbe essere facile da controllare. Il codice sorgente è al di sotto. Si noti che si può finire per dover utilizzare una combinazione di chiamate (ad esempio uno per trovare wow, un altro per trovare nativo 32 vs 64, ecc).
Inoltre, controllare http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/b1cfef99-5247-47c5-93d4-31eb6849df48 per un po 'di discussione.
using System;
using System.Management;
class Program
{
static void Main(string[] args)
{
foreach (ManagementBaseObject o in new ManagementClass("Win32_OperatingSystem").GetInstances())
{
Console.WriteLine("Win32_OperatingSystem.OSArchitecture = " + o.Properties["OSArchitecture"].Value);
break;
}
foreach (ManagementBaseObject o in new ManagementClass("Win32_ComputerSystem").GetInstances())
{
Console.WriteLine("Win32_ComputerSystem.SystemType = " + o.Properties["SystemType"].Value);
break;
}
Console.ReadKey();
}
}