1

ここには、サポートされているすべてのプロセッサ アーキテクチャの列挙があります: http://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture.aspx

どちらが実行環境に対応するかを判断する方法はありますか? System.Reflection.Assembly.GetExecutingAssembly().ProcessorArchitecture は MSIL を返します - 明らかに間違っています。

編集: Bojan Resnik が回答を投稿し、削除しました。得られた部分的なトレースから、明確化が必要であることがわかりました。

アセンブリは複数のアーキテクチャで実行する必要があり、実行中のプロセスが受け入れるアセンブリ命令に基づいてさまざまなことを行う必要があります。基本的に、ロードするネイティブ DLL のバージョンを選択する必要があります。アーキテクチャごとに 1 つあります。

4

3 に答える 3

2

P/Invoking GetSystemInfoは .Net から簡単で、WMI よりもはるかに軽量です。また、プロセスから見たアーキテクチャを返すため、x64 マシンでは、WOW プロセスは x86 を認識し、ネイティブ プロセスは x64 を認識します。

于 2009-09-29T22:48:53.207 に答える
-1

ここでは、試してみたい WMI 設定をいくつか紹介します。現時点では手元に 64 ビット システムはありませんが、簡単に確認できるはずです。ソースコードは以下。コールの組み合わせを使用しなければならない場合があることに注意してください (たとえば、1 つは wow を検索するため、もう 1 つはネイティブ 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 に答える