ホーム > プログラミング > Win32アプリケーションからOSのアーキテクチャを判別する方法

Win32アプリケーションからOSのアーキテクチャを判別する方法

たまには真面目なプログラミングの話題を。
.Net Framework上ではなくWin32APIを使う方法について。
昨日これを実装する必要ができてしまったわけでいろいろと挑戦してました。
というのも、.Net Frameworkがインストールされているか判別し、なければインストールするプログラムを作る過程で
「langpackのみ」x86/x64/ia64でバラバラに置いてあったので自動判別する必要が。
 
1.環境変数
環境変数に「PROCESSOR_ARCHITECTURE」というピンポイントな項目があります。
それは罠だまにあえー!
x64のWindows上からx86用のプログラムを動かした場合、WoW64の仮想環境上で動くので
PROCESSOR_ARCHITECTUREはx86を示します。
(確認済み。最初これではまった。その後、syswow64下のcmd.exeでPROCESSOR_ARCHITECTUREを見るとx86が入っているという情報を見て確信。)
じゃぁどうすんだよ・・・ということで次のこれ。
 
2.GetNativeSystemInfo
XP以降に実装されている新APIのようです。判別するフレームワークは3.5なので存在するものとして考えても実用上問題なし。
SYSTEM_INFO構造体のアドレスを引数で渡すとwProcessorArchitectureにOSのアーキテクチャが入って返ってきます。
(確認済み。CPUがAMD64、OSがx86の状況で実行したらPROCESSOR_ARCHITECTURE_INTEL、つまりx86が入っていた。)
64bitOSの友人に確認を頼んだところ正常にPROCESSOR_ARCHITECTURE_AMD64が入っていた模様。めでたしめでたし。
広告
カテゴリー:プログラミング
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。