2009-09-25 2 views
0

Существует перечисление всех поддерживаемых архитектур процессоров здесь: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx.NET Framework получить работает процессор архитектуры

Есть ли способ, чтобы определить, какой из них соответствует запущенной среде? System.Reflection.Assembly.GetExecutingAssembly(). ProcessorArchitecture возвращает MSIL - очевидно, неправильно.

EDIT: Bojan Resnik отправил ответ и удалил его. Я вижу, что некоторые разъяснения необходимы из частичного следа, который я получил.

Сборка должна запускаться на нескольких архитектурах и делать разные вещи, основываясь на инструкциях по сборке, которые принимает процесс выполнения. По сути, мне нужно выбрать, какую версию родной DLL загружать. У меня есть одна для каждой архитектуры.

+0

Dupe: http://stackoverflow.com/questions/767613/identifying-the-cpu-architecture-type-using-c –

+0

Не обман. Если я буду работать в WOW, я хочу, чтобы x86 не был x64. – Joshua

+0

Вам действительно нужно различать все эти архитектуры или просто x86/x64? –

ответ

1

Р/Вызов GetSystemInfo тривиальна из .Net, и намного более легкий вес, чем WMI. Кроме того, он возвращает архитектуру, как видно из процесса, поэтому на машине x64 процесс WOW увидит x86, а собственный процесс увидит x64.

0

Вот несколько настроек WMI, которые вы можете попробовать. В настоящий момент у меня нет 64-битной системы, но ее легко проверить. Исходный код приведен ниже. Обратите внимание, что вам может понадобиться использовать комбинацию вызовов (например, один, чтобы найти wow, другой - найти родной 32 против 64 и т. Д.).

Кроме того, ознакомьтесь с описанием http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/b1cfef99-5247-47c5-93d4-31eb6849df48.

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(); 
    } 
} 
Смежные вопросы