質問させてください。
インストーラーを作っていて、
起動時に、OSのbit数を取得して、
チェックボックス等の制御をかけたいのですが、
OSのbit数は、どのように取得すればよろしいでしょうか。
※OSは、Windowsのみの想定で、7から10ぐらいまでを想定しています。
よろしくお願いいたします。
OSのbit数の取得について
Re: OSのbit数の取得について
環境変数の値の判定結果で取得できます。
具体的には環境変数(PROCESSOR_ARCHITECTURE)が
●"x86"のときは32BIT版Windows
●"AMD64"または"IA64"のときは64BIT版Windowsと判定できます。
しかし64BIT版Windowsで32BITのプログラム(この場合はインストーラを示す)が起動されたとき、
環境変数(PROCESSOR_ARCHITECTURE)に"x86"が設定されて「32BIT版Windows」とみなされます。
以下に示す手順で行ってみてください。
●環境変数の取得
1 環境変数(PROCESSOR_ARCHITECTURE)の内容をWin32 API GetEnvironmentVariableで取得
2 環境変数(PROCESSOR_ARCHITEW6432)の内容をWin32 API GetEnvironmentVariableで取得
●32BIT版/64BIT版 Winsowsの判定
1 環境変数(PROCESSOR_ARCHITECTURE)が"x86"のとき
●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"のとき「64BIT版 Winsows」
●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"以外のとき「32BIT版 Winsows」
2 環境変数(PROCESSOR_ARCHITECTURE)が"x86"以外のとき「64BIT版 Winsows」
よろしくお願いします。
具体的には環境変数(PROCESSOR_ARCHITECTURE)が
●"x86"のときは32BIT版Windows
●"AMD64"または"IA64"のときは64BIT版Windowsと判定できます。
しかし64BIT版Windowsで32BITのプログラム(この場合はインストーラを示す)が起動されたとき、
環境変数(PROCESSOR_ARCHITECTURE)に"x86"が設定されて「32BIT版Windows」とみなされます。
以下に示す手順で行ってみてください。
●環境変数の取得
1 環境変数(PROCESSOR_ARCHITECTURE)の内容をWin32 API GetEnvironmentVariableで取得
2 環境変数(PROCESSOR_ARCHITEW6432)の内容をWin32 API GetEnvironmentVariableで取得
●32BIT版/64BIT版 Winsowsの判定
1 環境変数(PROCESSOR_ARCHITECTURE)が"x86"のとき
●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"のとき「64BIT版 Winsows」
●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"以外のとき「32BIT版 Winsows」
2 環境変数(PROCESSOR_ARCHITECTURE)が"x86"以外のとき「64BIT版 Winsows」
よろしくお願いします。
Re: OSのbit数の取得について
ネットで検索すると主にバッチファイルの例ですが参考になると思います。
ご確認願います。
ご確認願います。
Re: OSのbit数の取得について
早速の回答、ありがとうございます。
下記のように、プログラムを組んでみたんですが、
私の力不足により、いまだ、処理を作りきることができません。
度々で申し訳ありませんが、もう少し、教えていただけないでしょうか。
上記のプログラムを実行すると、bufferの内容が「x86」だったとしても、
最初の分岐で、Elseの方に流れてしまいます。
ためしに、
MessageBox(0,buffer, "確認", MB_OK)
と表示させると、「x86」と表示されるので、bufferの取得はできているようです。
if分の書き方か、変数の扱いが間違っているとは思うのですが、
どのように直せばよいか、教えていただけないでしょうか。
よろしくお願いいたします。
下記のように、プログラムを組んでみたんですが、
私の力不足により、いまだ、処理を作りきることができません。
度々で申し訳ありませんが、もう少し、教えていただけないでしょうか。
コード: 全て選択
Dim buffer[2047] As Byte
Dim buffer2[2047] As Byte
GetEnvironmentVariable("PROCESSOR_ARCHITECTURE",buffer,2048)
If buffer = "x86" Then
GetEnvironmentVariable("PROCESSOR_ARCHITEW6432",buffer2,2048)
If buffer2 = "AMD64" Then
' 64bit
(64bitの時の処理)
Else
' 32bit
(32bitの時の処理)
End If
Else
' 64bit
(64bitの時の処理)
End If
最初の分岐で、Elseの方に流れてしまいます。
ためしに、
MessageBox(0,buffer, "確認", MB_OK)
と表示させると、「x86」と表示されるので、bufferの取得はできているようです。
if分の書き方か、変数の扱いが間違っているとは思うのですが、
どのように直せばよいか、教えていただけないでしょうか。
よろしくお願いいたします。
Re: OSのbit数の取得について
バイト型配列で「If buffer = "x86" Then」でコーディングすると
C/C++と同様にbufferの値が"x86"かどうかではなくbufferのポインタの値と"x86"のポインタの値が一致するかどうかという判定となります。
なので期待通りに動作しません。
そこで「If buffer = "x86" Then」を「If memcmp(buffer,"x86",3) = 0 Then」に変更すると期待通りに動作します。
なおmemcmpはabのヘルプにのってません。
詳細はネットで検索して確認してください。
C/C++と同様にbufferの値が"x86"かどうかではなくbufferのポインタの値と"x86"のポインタの値が一致するかどうかという判定となります。
なので期待通りに動作しません。
そこで「If buffer = "x86" Then」を「If memcmp(buffer,"x86",3) = 0 Then」に変更すると期待通りに動作します。
なおmemcmpはabのヘルプにのってません。
詳細はネットで検索して確認してください。
最後に編集したユーザー たかせ [ 2017年7月29日(土) 23:04 ], 累計 1 回