2018/05/09

Azure上の仮想マシン、どの物理マシン上で動いているのかなー


下記レジストリ下で、調べられます。
同様に、ホストOSのバージョンとかもあります。

■レジストリ
HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Virtual Machine¥Guest¥Parameters

■キー
PhysicalHostName


これが regedt32.exeでも見られるし、reg.exeでも
===
reg query "HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Virtual Machine¥Guest¥Parameters" /v PhysicalHostName
===
取れるし、PowerShellでも取れる。

なのに、C#のプログラムから取れない・・・。

色々試行錯誤しました。レジストリのパーミッション調べたりして。

結果、VisualStudioの"Platform Target(プラットフォーム ターゲット)"を"Any CPU"にしていても、"Prefer 32-bit(32 ビットの優先)"というチェックボックスにチェックが入っていると、32bitアプリとして動いてしまうことが原因、と判明。このチェックボックス、デフォルトでチェックが付いているのです。。

64 bit Windows OS下では、レジストリは32bitアプリと64bitアプリとで見にいくところが違っているから注意して、ってのは見ていたのですが"Platform Target"が"Any CPU"なんだから、64bit OS上で動かしているわけだし64bitアプリとして動いているに決まってんだろ、としていたのが敗因でした。。