Pergunta

Há uma enumeração de todas as arquiteturas de processadores suportados aqui: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx

Existe alguma maneira para determinar qual deles corresponde ao ambiente de execução? . System.Reflection.Assembly.GetExecutingAssembly () ProcessorArchitecture retorna MSIL -. Obviamente errado

EDIT: Bojan Resnik postou uma resposta e excluiu. Vejo que alguns esclarecimentos é necessária a partir do traço parcial que eu tenho.

O conjunto precisa ser executado em várias arquiteturas e fazer coisas diferentes com base no que a montagem instruções o processo em execução aceita. Essencialmente, eu preciso selecionar qual versão de uma DLL nativa para carregar. Eu tenho um para cada arquitetura.

Foi útil?

Solução

P / Invocando GetSystemInfo é trivial de Net e é muito mais leve peso do que WMI. Além disso, ele retorna a arquitetura como visto pelo processo assim por diante uma máquina x64 um processo WOW verá x86 e um processo nativo verá x64.

Outras dicas

Eis algumas configurações WMI que você pode querer tentar. Eu não tenho um sistema de 64 bits acessível no momento, mas deve ser fácil de verificar. O código fonte está abaixo. Note-se que pode acabar por ter de utilizar uma combinação de chamadas (por exemplo, uma para encontrar uau, outro para encontrar nativo 32 vs 64, etc).

Além disso, confira http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/b1cfef99-5247-47c5-93d4-31eb6849df48 para mais alguma discussão.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top