1

这里有所有支持的处理器架构的枚举:http: //msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx

有什么方法可以确定哪个对应运行环境?System.Reflection.Assembly.GetExecutingAssembly().ProcessorArchitecture 返回 MSIL——显然是错误的。

编辑:Bojan Resnik 发布了一个答案并将其删除。我看到需要从我得到的部分跟踪中进行一些澄清。

程序集需要在多种架构上运行,并根据运行进程接受的程序集指令执行不同的操作。本质上,我需要选择要加载的本机 DLL 版本。我为每种架构都有一个。

4

3 回答 3

2

P/Invoking GetSystemInfo在 .Net 中是微不足道的,并且比 WMI 轻得多。此外,它返回进程所看到的体系结构,因此在 x64 机器上,WOW 进程将看到 x86,而本机进程将看到 x64。

于 2009-09-29T22:48:53.207 回答
0

您可以为此使用System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture 。这是在 .NET Framework 4.7.1 中添加到 .NET 的。

于 2021-12-02T00:40:56.803 回答
-1

以下是您可能想要尝试的一些 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();
    }
}
于 2009-09-29T22:33:57.083 回答