.NET Framework запускает архитектуру процессора
-
16-09-2019 - |
Вопрос
Здесь приведен список всех поддерживаемых процессорных архитектур: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx
Есть ли способ определить, какой из них соответствует рабочей среде?System.Reflection.Assembly.GetExecutingAssembly().ProcessorArchitecture возвращает MSIL — очевидно, неправильно.
РЕДАКТИРОВАТЬ:Боян Ресник опубликовал ответ и удалил его.Я вижу, что необходимы некоторые разъяснения из частичного следа, который я получил.
Сборка должна работать на нескольких архитектурах и выполнять разные действия в зависимости от того, какие инструкции сборки принимает работающий процесс.По сути, мне нужно выбрать, какую версию собственной DLL загрузить.У меня есть по одному для каждой архитектуры.
Решение
П/Вызов GetSystemInfo является тривиальным из .Net и намного легче, чем WMI.Кроме того, он возвращает архитектуру, видимую процессом, поэтому на машине x64 процесс WOW будет видеть x86, а собственный процесс — x64.
Другие советы
Вот несколько настроек WMI, которые вы можете попробовать.На данный момент у меня нет под рукой 64-битной системы, но это должно быть легко проверить.Исходный код ниже.Обратите внимание, что вам может потребоваться использовать комбинацию вызовов (например,один найти вау, другой найти родной 32 vs.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();
}
}