Вопрос

Здесь приведен список всех поддерживаемых процессорных архитектур: 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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top