OSが32Bitか64Bitかの識別

タグの編集
投稿者 yufuru  (社会人) 投稿日時 2010/7/15 14:42:51
偶然に”Visual Basic 中学校”をを見つけ、VB2010をさわり始めた超初心者です。
サンプルプログラムまたネットなどを参考にしながら、自分なりのプログラムを作り始めたのですが、インストール先のOSが32Bitの物と64Bitの物が有り、作ったプログラムをインストール(CreateInstaller Freeで、インストーラを作成)する時に、自動でOSが32Bitか64Bitを識別させるステップをプログラムに組み込みたいと考えているのですが、何かいい方法が有りますでしょうか?

お忙しいとは思いますがご教授頂ければ幸いです。  以上
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/7/15 15:31:35
判定条件を加えたいのは、インストーラー側でしょうか? それともアプリ側でしょうか?
アプリ側だとすれば、IntPtr.Size プロパティで判定できます。

なお、コンパイルモードにも注意して下さい。
http://msdn.microsoft.com/ja-jp/library/5b4eyb0k.aspx

既定の Any CPU 設定のままコンパイルした場合は、そのアプリは
 32bit OS で実行 → 32bit アプリとして動作
 64bit OS で実行 → 64bit アプリとして動作
という動きになりますが、x86 としてコンパイルすると、
 32bit OS で実行 → 32bit アプリとして動作
 64bit OS で実行 → 32bit アプリとして動作(WOW64)
となりますし、x64 としてコンパイルした場合は
 32bit OS で実行 → 動作しない
 64bit OS で実行 → 64bit アプリとして動作
という結果となります。どれが良いかはケースバイケースです。


なお、OS 判定を行う必要がある場合には、Environment.OSVersion プロパティ を利用できます。
また、WOW64 上で動いているのかどうかを判定する必要がある場合には IsWow64Process API を利用できます。
投稿者 YuO  (社会人) 投稿日時 2010/7/15 16:09:22
インストーラ側で判定したいのであれば,Windows Installer系ならVersionNT64プロパティが使えそうです。
MSDN: VersionNT64 Property (Windows)
http://msdn.microsoft.com/en-us/library/aa372497.aspx

ただし,CreateInstaller FreeとやらがWindows Installerに対応しているかどうかはわかりませんが。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/7/15 18:55:31
VB2010 であれば、
 Environment.Is64BitProcess プロパティ
 Environment.Is64BitOperatingSystem プロパティ
なども判定に使えますね。

http://msdn.microsoft.com/ja-jp/netframework/ee855910.aspx
http://dobon.net/vb/dotnet/system/is64bit.html
投稿者 yufuru  (社会人) 投稿日時 2010/7/16 20:04:42
 魔界の仮面弁士 様 ・ YuO 様

早速のご連絡大変有難う御座います。

私の言葉が明確でない為、混乱を招いてしまいましたが、判定をしたいのはアプリ側ですので、IntPtr.Size プロパティ、 Environment.Is64BitProcess プロパティ、Environment.Is64BitOperatingSystem プロパティなどを試して見たいと考えます。

まだ、本当の初心者ですので今後色々と質問をさせて頂くとは思いますが、今後とも宜しくお願いいたします。

以上
投稿者 yufuru  (社会人) 投稿日時 2010/7/20 16:33:30
魔界の仮面弁士 様

”なお、コンパイルモードにも注意して下さい。
http://msdn.microsoft.com/ja-jp/library/5b4eyb0k.aspx”

上記の件ですが、私が使用しているのが、"VB2010 Express"ですので、残念ながら上記の様なコンパイルモードの選択機能は有りませんでした。(有れば有り難いかったのですが!)

以上
投稿者 YuO  (社会人) 投稿日時 2010/7/21 10:40:11
最適化はサポートされないと書いてありますが,x64用のビルドやAny CPU用のビルドも可能です。
# デフォルトは2010からAny CPUではなくx86になっています。

x64用のビルド構成の設定手順例です。手元の環境では英語版のみインストールしているので,以下の表記は英語版になります。
1. Tools - Options - Project and Solutionsで,Always show solutionをチェックしてOKを押す (以後,外すまでこの操作は不要)
2. Solution ExplorerからSolution - Propertiesを選択
3. Configuration Properties - Configuration - Configuration Managerと選択
4. Active solution platformから<New...>を選択
5. Type or select the new platformからx64を選択,OKを押す
6. Active solution platformからx64を選択,Closeを押し,さらにOKを押す

手元にx64環境がないので,x64で動いていることを確認はしていませんが,ビルドした物がx86環境では環境要因で動かないことは確認しています。
また,環境を変更することで,corflagsコマンド (要Windows SDK) で以下のようにヘッダ情報が変化することも確認しています。
# 対象はコンソールアプリケーションプロジェクトをそのままビルドした物。

<AnyCPU>
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0

<x64>
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32+
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0

<x86>
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 3
ILONLY    : 1
32BIT     : 1
Signed    : 0
投稿者 yufufu  (社会人) 投稿日時 2010/7/21 14:20:11
YuO 様

早速にご連絡有り難う御座います。

御連絡頂いた手順の、

1. Tools - Options - Project and Solutionsで,Always show solutionをチェックしてOKを押す (以後,外すまでこの操作は不要)
2. Solution ExplorerからSolution - Propertiesを選択

までは問題なく出来ましたが、その次の

3. Configuration Properties - Configuration - Configuration Managerと選択

こので”Configuration Properties”(日本語で該当するもの)が表示されませんでした。

やはり、、"VB2010"では最適化はサポートされているのでしょうが、  "VB2010 Express"(無償版)では、最適化はサポートされていないように思います。

以上
投稿者 yufuru  (社会人) 投稿日時 2010/7/21 14:52:12
YuO 様

投稿してからまた更にいろいろ操作して見たところ、『1. Tools - Options - Project and Solutionsで,Always show solutionをチェック』と同じ画面で、『ビルド構成の詳細を表示(I)』にチェックを入れることで、『Configuration Properties』(構成プロパティ)が、『Solution Properties』に表示される様に成り、そこでご連絡の通り『3. Configuration Properties - Configuration - Configuration Managerと選択
』以降の手順で、最適化の選択が出来る事を確認致しました。

ご教授大変有り難う御座いました。

以上