ページ 11

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

Posted: 2018年10月12日(金) 13:33
by tosh
お世話になります。

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

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

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

Posted: 2018年10月12日(金) 22:08
by Bull
回答になってなくて申し訳ないですが、下の画像は 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など)も使用できないのですか?

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

Posted: 2018年10月12日(金) 22:17
by Bull
追記します。

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

.NET Framework は 4.5 です。

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

Posted: 2018年10月15日(月) 11:25
by tosh
Bull様
回答ありがとうございます。

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

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

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

Posted: 2018年10月16日(火) 03:24
by YuO
tosh さんが書きました:
9ヶ月前
職場の同僚の指摘によると、対象のソリューションは元々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以降) が等しいか調べる