ユーザーが実行しているCPUアーキテクチャを確認したいですか。 i386またはX64またはAMD64です。私はC#でそれをやりたい 私はWMIまたはレジストリを試すことができると知っています。これらの2つから離れて他の方法はありますか? 私のプロジェクトは.NET 2.0をターゲットにしています!C#を使用してCPUアーキテクチャの種類を特定する
答えて
また、(それが操作していない場合にのみ動作)を試みることができる:
System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
おそらくユーザーに質問できますか?
ちょうど冗談...私はWMIがあなたのために使うものだと思います。しかし、おそらく他にもいくつかの方法がありますか?
WMIの場合、LinqToWmiを使用できます。私は一度試してみましたが、それはまっすぐに見えました=) - >http://www.codeplex.com/linq2wmi
Win32_Processor WMIクラスは仕事をします。強く型付けされたラッパーを生成するにはMgmtClassGen.exeを使用してください。
これはおそらく質問に対する最良の答えです。 –
これは私を助けました!ありがとう+1! –
Win32_Processorクラスはどのように役立つはずですか? OSArchitectureについて話していた場合、このプロパティはほとんどのWindowsバージョンでは利用できませんが、いくつかの最新バージョンでのみサポートされています。 – ivan
たぶんthis CodeProjectの記事が役立つかもしれませんか?これは、System.Management名前空間のManagementObjectSearcherを使用してハードウェア情報を検索します。
私は..あなたは、WMIとLINQのような重い肥大化を避けるべきであると信じて、あなたが肥大化するAPIやフレームワークによって満たされるいずれも、一緒に行くと、あなたは最終的に、より多くの情報を取得する必要があります。
CPUID情報を呼び出して抽出するDLLを呼び出すだけです。 C++/CLIまたはpinvokeを使用すると、ベンダーに必要なすべての情報が得られます。まず、その命令がサポートされているかどうか(その時間の99%)を確認する必要があります。稼働してすぐに取得するには
はwincpuidサンプル用のインテルのサイトをチェックして、そこからcpuid.hから曲を抽出することです。そこだけ2つのベンダーであり、1はメモリ・レイテンシと良好であり、他の一つは(マネージコード対ネイティブのような)ではありません。だから、(ところでない人)他のアーキテクチャなどにモノラルに問題があるでしょう。 x64のためとして、あなたはすでにそれを知っているか、単に(そのそこにすでにと.NETの配布を使用して、顧客のハードドライブを殺す)corflagsを取得。..
(http://software.intel.com/en-us/articles/api-detects-ia-32-and-x64-platform-cpu-characteristics/)
が既に考えを表明いただきありがとうござい見ます私はWMIを使用することの提案を読んだとき(これは嘆きを引き出した)持っていました。 –
あなたのintel.comへのリンクは、現在死んでいます。 –
ここに私がやったことだ:
public static bool Isx86()
{
return (Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%").Length == 0);
}
64ビットアーキテクチャの場合は、2つのプログラムファイルのenv変数があります。あなたがx86上にいるならば、あなたはそれを持っているだけです。
あなたが心配するのは、32ビットと64ビットの別名x86 vs x64だけです。次のBCLプロパティEnvironment.Is64BitOperatingSystemを使用してください。 –
これは私には、最も単純なようだ:ここに私を導いた何
System.Environment.Is64BitOperatingSystem
.NET 4.0については、.NET 4.0に関する質問がありますが、 – ivan
は32〜64対ビットのOSのためにチェックしています。最高の定格答えが現在のプロセスの設定を見ています。答えが見つからないと、私は次の設定を見つけました。これはあなたのために働くことを望みます。ここで
bool is64 = System.Environment.Is64BitOperatingSystem
.NET Framework 4+ –
古いスレッドを復活させて申し訳ありませんが、将来の読者の助言として:32ビットプロセスは64ビットOS上でうまく動作できるので、 'System.Environment.Is64BitProcess'は私の場合にはもっと便利でした('アーキテクチャに基づいて "正しい" sqlite3.dll'のためのPATH'変数)。私の場合、OSは実際64ビットでしたが、別のライブラリのために私のアプリケーションを32ビットとしてコンパイルする必要がありました。 – nurchi
Is64BitProcessは少なくともバージョン4まで登場しませんでした。どのバージョンでも、私はIntPtr.Sizeが最も洗練されたソリューションだと思います。私はこのページに私を連れて来たコードの中に3進表現を巻きました。 –
は(P /呼び出しに基づいて)動作するようですコードの一部です:
[DllImport("kernel32.dll")]
private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSystemInfo);
private const int PROCESSOR_ARCHITECTURE_AMD64 = 9;
private const int PROCESSOR_ARCHITECTURE_IA64 = 6;
private const int PROCESSOR_ARCHITECTURE_INTEL = 0;
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEM_INFO
{
public short wProcessorArchitecture;
public short wReserved;
public int dwPageSize;
public IntPtr lpMinimumApplicationAddress;
public IntPtr lpMaximumApplicationAddress;
public IntPtr dwActiveProcessorMask;
public int dwNumberOfProcessors;
public int dwProcessorType;
public int dwAllocationGranularity;
public short wProcessorLevel;
public short wProcessorRevision;
}
注意と
public static ProcessorArchitecture GetProcessorArchitecture()
{
SYSTEM_INFO si = new SYSTEM_INFO();
GetNativeSystemInfo(ref si);
switch (si.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_AMD64:
return ProcessorArchitecture.Amd64;
case PROCESSOR_ARCHITECTURE_IA64:
return ProcessorArchitecture.IA64;
case PROCESSOR_ARCHITECTURE_INTEL:
return ProcessorArchitecture.X86;
default:
return ProcessorArchitecture.None; // that's weird :-)
}
}
このコードは、既存のCLRのProcessorArchitecture列挙型を再利用し、 .NET Framework 2以上をサポートしています。
ありがとう、これは素晴らしい作品です...私はマシンタイプがOSのタイプではないことを期待しています。 –
サイモン、これははるかにもっともリーンなソリューションです。 Platform Invokeを恐れている人は誰でもそれを乗り越えてください。それは(通常)噛まない! –
最後にC#で現在実行中のCLRランタイムのためのプラットフォーム/プロセッサアーキテクチャを解決するための最短のトリックである:
PortableExecutableKinds peKind;
ImageFileMachine machine;
typeof(object).Module.GetPEKind(out peKind, out machine);
ここModule.GetPEKindは、.NET V2ので存在ImageFileMachine列挙を返す:
public enum ImageFileMachine
{
I386 = 0x014C,
IA64 = 0x0200,
AMD64 = 0x8664,
ARM = 0x01C4 // new in .NET 4.5
}
なぜ使用しないでくださいnew AssemblyName(fullName)
またはtypeof(object).Assembly.GetName()
?
まあ(1.0以降)ASP.NET MVCのソースコード内でこのHACK
コメントがある:
private static string GetMvcVersionString() {
// DevDiv 216459:
// This code originally used Assembly.GetName(), but that requires FileIOPermission, which isn't granted in
// medium trust. However, Assembly.FullName *is* accessible in medium trust.
return new AssemblyName(typeof(MvcHttpHandler).Assembly.FullName).Version.ToString(2);
}
は、彼らが自分たちのためにいくつかの隠し技を使うを参照してください。残念ながら、AssemblyName
コンストラクタはProcessorArchitecture
フィールドを適切に設定しません。新しいAssemblyNameの場合はNone
になります。
今後の読者には、その醜いGetPEKindをImageFileMachineで使用することをお勧めします。
注:
- これは、現在実行中のランタイムアーキテクチャではなく、基本的なシステムアーキテクチャを返します!
しかし、唯一の例外は、I386ランタイムがAMD64システム上で動作することです。 - mono/ubuntu 14.04/AMD64および.NET/Win7/I386でテスト済みです。
なぜ知りたいのかによって、IntPtr構造体のサイズを確認するのが最も簡単です。
私は匿名臆病者の考え方が好きです! –
私はこの質問は過去からですが、2017年のように、.NETの標準で、現在のプロセスのアーキテクチャを知るための簡単な方法は、今があることを知っている:
System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture
返された値がありますX86、X64、ARM、ARM64のいずれかであり、実行中のプロセスのアーキテクチャを示します。OSArchitecture
は、インストールされたオペレーティングシステムのアーキテクチャを返します。 (ただし、かなり役に立たない...)ドキュメントへ
リンク:
RuntimeInformation.ProcessArchitecture: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.runtimeinformation.processarchitecture?view=netstandard-1.4
アーキテクチャの列挙:これについて https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.architecture?view=netstandard-1.4
どのように?
switch (typeof(string).Assembly.GetName().ProcessorArchitecture) {
case System.Reflection.ProcessorArchitecture.X86:
break;
case System.Reflection.ProcessorArchitecture.Amd64:
break;
case System.Reflection.ProcessorArchitecture.Arm:
break;
}
case *.Arm:
はまだテストされていません。
- 1. Metadata-extractorを使用してファイルの種類を特定する方法
- 2. は、特定の種類
- 3. C#で特定のサービスのCPU使用率を取得する
- 4. 特定のCPUアーキテクチャのapkファイルを作成する方法
- 5. プロトコルを特定の種類のクラスに限定する
- 6. djangoにあるデータベースオブジェクトの種類を特定します
- 7. 特定の種類のソースファイルのBazelクエリ
- 8. 特定の種類のデッドロックの理解
- 9. 使用する配列の種類を決定する
- 10. gdbが特定の種類のメモリをダンプします
- 11. を使用して同じ種類のクラスを抽出する
- 12. SubclassDlgItemを使用してコントロールの種類を変更する
- 13. Gitでコミットしている特定の種類のファイルをブロックするには?
- 14. c1541-writeコマンド(VICE)を使用してファイルの種類を定義する方法
- 15. ウィザード/アンケートの種類のアプリケーション用の一般的なJ2EEアーキテクチャ
- 16. 特定のディレクトリから特定の種類のファイルを一覧表示する
- 17. 特定の種類のデータをフィルタリング/選択する
- 18. Unityシーン内のオブジェクトの種類を特定する
- 19. C++テンプレートの種類
- 20. SQL:特定のIDと、特定の種類
- 21. スケジューリングアルゴリズムがプロセスの種類(I/O、CPUバウンド)を決定する方法
- 22. SIMの種類を特定する方法は?
- 23. UIEventオブジェクトからタッチジェスチャの種類を特定する
- 24. API.AIでプラットフォームの種類を特定する方法
- 25. ポップアップの種類を特定する方法
- 26. psutil:特定のプロセスのCPU使用量を測定する
- 27. C++とCは同じ種類のリンカーを使用しますか?
- 28. パッケージの種類を商品パッケージの種類として使用することはできません
- 29. 2種類の異なる種類の一致に使用する戻り値
- 30. powershellを使用して特定のプロセスのCPU%を取得する
設定されていない場合はどうなりますか? –
設定されていない場合(少なくともVistaの場合、デフォルトで設定されています)。私はこれを別の方法として提案しました。必ずしも最良の方法ではありません。 –
いい答えですが。 –