Pregunta

No es una enumeración de todas las arquitecturas de procesadores soportados aquí: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx

¿Hay alguna manera de determinar cuál de ellas corresponde al entorno de ejecución? . System.Reflection.Assembly.GetExecutingAssembly () devuelve ProcessorArchitecture MSIL -. Obviamente erróneo

EDIT: Bojan Resnik registró una respuesta y lo borró. Veo que es necesaria alguna aclaración por parte de la traza parcial llegué.

El montaje debe ejecutarse en múltiples arquitecturas y hacer cosas diferentes en función de lo que las instrucciones de montaje acepta el proceso en ejecución. Esencialmente, necesito seleccionar qué versión de un archivo DLL nativo para cargar. Tengo uno para cada arquitectura.

¿Fue útil?

Solución

P / Invocación GetSystemInfo es trivial de .Net y es mucho más ligero peso de WMI. Además, devuelve la arquitectura como se ve por el proceso de modo en una máquina x64 un proceso WOW verá x86 y un proceso nativo verá x64.

Otros consejos

Aquí hay algunas opciones de configuración de WMI es posible que desee probar. Yo no tengo un sistema de 64 bits a mano en el momento, pero debe ser fácil de comprobar. El código fuente está por debajo. Tenga en cuenta que puede terminar encima de tener que utilizar una combinación de llamadas (por ejemplo, a uno encontrar wow, otro para encontrar nativa 32 vs 64, etc.).

Además, la salida http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/b1cfef99-5247-47c5-93d4-31eb6849df48 para algunos más discusión.

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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top