OSのビット数を調べたいのですが・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tosh

OSのビット数を調べたいのですが・・・

#1

投稿記事 by tosh » 1年前

お世話になります。

VB.netで、現在実行されているOSが32bitか64bitか確認するため、判定文で「System.Environment.Is64BitOperatingSystem」を使おうとしていますが、「Is64BitOperatingSystemはEnvironmentのメンバーではありません」と表示され、コンパイルエラーになってしまいます。

.NET Frameworkは4.6が入っているのですが、使うには宣言とか参照の追加とか、何らかの準備が必要なのでしょうか。

Bull
記事: 135
登録日時: 5年前

Re: OSのビット数を調べたいのですが・・・

#2

投稿記事 by Bull » 1年前

回答になってなくて申し訳ないですが、下の画像は Visual Studio でオブジェクト ブラウザーを開いているスクリーンショットです。
System.Environment.Is64BitOperatingSystem は mscorlib に含まれるようですので、特別な Imports などは必要ないと思われます。

コード:

Module Module1
    Sub Main()
        If Environment.Is64BitOperatingSystem Then
            Console.WriteLine("64Bit OS です")
        Else
            Console.WriteLine("64Bit OS ではありません")
        End If
    End Sub
End Module
こちらでは、このようなソースで問題なくコンパイルと実行ができています。

Environment の他の関数(GetEnvironmentVariablなど)も使用できないのですか?
添付ファイル
VisualStudio20181012_001.png

Bull
記事: 135
登録日時: 5年前

Re: OSのビット数を調べたいのですが・・・

#3

投稿記事 by Bull » 1年前

追記します。

こちらの環境は
Windows 7 Pro (32bit) Visual Studio 2015
Windows 8.1 Pro (64bit) Visual Studio 2017

.NET Framework は 4.5 です。

tosh

Re: OSのビット数を調べたいのですが・・・

#4

投稿記事 by tosh » 1年前

Bull様
回答ありがとうございます。

オブジェクトブラウザで確認してみましたが、Environmentの下にIs64BitOperatingSystemは入っていませんでした。
職場の同僚の指摘によると、対象のソリューションは元々VB2010で作成し、Windows7上で動作していたものであり、mscorlibのバージョンが2.0.0.0であるのが原因かも知れないとの事でした。

仮に追加できたとしても、Windows7上に持って行ったときに動かないと意味がないので、別の方法を試してみようと思います。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: OSのビット数を調べたいのですが・・・

#5

投稿記事 by YuO » 1年前

tosh さんが書きました:
1年前
職場の同僚の指摘によると、対象のソリューションは元々VB2010で作成し、Windows7上で動作していたものであり、mscorlibのバージョンが2.0.0.0であるのが原因かも知れないとの事でした。
同僚の方が指摘されている内容に含まれているとは思いますが,プロジェクトのTarget Frameworkが.NET Framework 3.5になっている,ということはないでしょうか。
Windows 7は標準では.NET Framework 3.5が入っていて.NET 4系が入っていないため,プロジェクトが.NET 2.0/3.0/3.5向けに作られている可能性があります。

上記であるならば,解決策としてはいくつかあると思います。
  • .NET Framework 4系にTarget Frameworkのバージョンを上げる ref) Visual Studio で .NET Framework のバージョンを指定する | Microsoft Docs # 対象とするバージョンを変更するには
    →可能であるならばこれが一番の推奨方法です。ただし,土台を変えるわけですから,テストが必要です。
  • 既存を真似る
    →一応Reference Sourceに.NET Framework 4.7.2 (投稿時点) のコードがあります。AnyCPUでは使えませんが。
  • 真面目に作る
    GetNativeSystemInfo APIを呼び出し,SYSTEM_INFO::wProcessorArchitectureを見て判断することになります。
  • 手抜きする ref) WOW64 Implementation Details | Microsoft Docs # Environment Variables
    • PROCESSOR_ARCHITEW6432 環境変数
    • ProgramW6432 環境変数と ProgramFiles 環境変数 (Windows 7/Windows Server 2008 R2以降) が等しいか調べる

返信

“C言語何でも質問掲示板” へ戻る