何これ! と、浦島太郎 状態の私。
今まで使っていた Windows 7 sp1 & Visual Studio 2013 Community Update5 の VB で書いたものが、
Windows 10 上で返す OS のバージョン ... 。 あらまぁ。
確か、 Windows 10 のバージョンって、今、 10.0.10586 じゃぁ なかったでした っけ?。 個人的な勘違いですか ? ... 。.
そう、バージョン って、 1511 も、バージョンですが ... ??? 。
あ~あ、 ややこしい事 !!! 。
昔風に考えた時、 6. で始まるナンバーは Vista 系 の Vista/7/8/8.1 と繋がる系列に振られた番号ですよね。
6 は OS カーネルが 大きく変わらない事を現していましたよね。
そう言えば、 Windows 10 の最初の Issue (事前公開) も 6.4 でしたっけ?。
でも、 正式版は、カーネルの変更を反映して、 10.0 表記に変わり ... 。
それなのに、現行では、VB では、 OSVersion の返す値は 6.2.9200 ? が返って来るのですよね ... 。
Visual Studio 2013 Community Update5 での お話 です。 *1.
Visual Studio 2017 では こんな事はありません。 (対処不要) *1.
こんなコードでした。
My.Computer.Info.OSPlatform & " (V" & My.Computer.Info.OSVersion & ")"
解決策は ... 。
それを、
Dim regkey As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _
"SOFTWARE\Microsoft\Windows NT\CurrentVersion", False)
Me.Label1.Text = My.Computer.Info.OSPlatform & ".v." & My.Computer.Info.OSVersion & " / " & _
regkey.GetValue("ProductName").ToString & " " & "(b:" & _
regkey.GetValue("CurrentBuild").ToString & ") "
の様に、 レジストリに設定してある OS 絡みの設定値を併記するものに改めました。
OS の方針変更は、時として、この様に、 悩み多い問題 を提示します。
この問題は、既に、既知の類なのでしょうが、
Windows 7 を使い続けて、やっと、Windows 10 に上がった私には、 浦島太郎 的 ショック なのでした ... 。
Windows 8.1 になった頃、 この辺りの仕組みの方針転換があった様ですね。
だから、 Windows 10 上から、OS のバージョンを尋ねても、方針転換前の 8 の値 6.2.9200 を返しているのでしょう。.
話を戻して、
レジストリはユーザーが書き換え可能ですが、
認証を通らなくする様な、故意の 或いは 不注意による 値変更のケースは 考えたくないので、
これを信じる事にします。
プログラムを公開するなら、
マニフェストを それ用に しっかり 調整 する事で、 変数の戻り値は正確なものになるんだそうです。
つまり、サポートする OS の範囲を明記だそうです。 未検証。.
別の方法として、
System.Management.dll を参照設定して、
Dim mc As New System.Management.ManagementClass("Win32_OperatingSystem")
Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances()
Dim moName As String = ""
Dim moVers As String = ""
For Each mo As System.Management.ManagementObject In moc
moName = mo("Caption").ToString
moVers = mo("Version").ToString
Next
ですって。 未検証。.
参照設定は面倒ですが、これも正解なのでしょうね。
それにしても、 面倒な事になっているもんですね。
あ~、びっくりした。
尚、 msdn に正式な記述があります。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724832%28v=vs.85%29.aspx
それの一部を 引用して置きます。 外部リンクの部分は参照を外しています。.
* For applications that have been manifested for Windows 8.1 or Windows 10. Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.
まったく もう。
[2016/06/01] コードの不備を訂正 Me.Label1.Text = My.Computer.Info.OSPlatform の部分.
[2017/07/28] 誤字訂正 及び VS2017 の件を追記 *1.
0 件のコメント:
コメントを投稿