ちょっと「プログラムでエラーが出るから診て欲しい」と依頼され、色々と調査したところ、なんとWindows 10のWMIという仕組みが破損している事が判明しました。
WMIとは、平たく言うとアプリケーションからパソコンのハード情報を読み取るために使う仕組みの事で、ウインドウズ・マネージメント・インストゥルメンテーションの略なんですね。
自分が作ったアプリから、動いているPCのIPアドレスを取得するとか、そういう時に使えます。
あと、PCのプロパティを見るとメインRAMの容量とか表示されますけど、あれもこのWMI使ってるので、仕組みが破損すると正しく表示されなくなります...(今回分かった)
■確認方法(自己流)
↑WMIが破損してるかどうか、簡単に確認する方法なんですが、たとえばPowerShellでもって...GET-WMIOBJECT -LIST | ?{$_ -MATCH "WIN32_NETWORK"}というコマンドを入力すると、ネットワークアダプターがらみのWMIのクラスがリストアップされて来るのですが、破損していると何もリストアップされません。
WMIが破損していても、プログラムは特にコンパイルエラーにはならず、実行時にへグるのが怖い所。
■復旧方法(自己流)
(1)まずはPowerShellを使って以下のコマンドでWMIをストップさせないといけないんですが、破損したシステムだと、ストップしたら間髪入れずに勝手にリスタートしてしまうので、次の(2)が成功するまで(1)と(2)を繰り返すような事になります!! ↓NET STOP WINMGMT
(2)コマンドでもエクスプローラーでも良いので、フォルダ「C:\Windows\System32\wbem」に入り、そこにあるフォルダ「Repository」を何でも良いのでリネームする準備をしておきます。 ↓ ↑それで、(1)でWMIを止めて、止まっている間に(2)でRepositoryフォルダをリネームします。
普通は、リスタートのコマンドを入力しないとリスタートしないのですが、破損したコンピューター上のWMIは(実際にやってみて分かった)止めてもすぐに勝手にリスタートしてしまうんですね。
全部がそうかは分かりません。
リスタートしてしまうと、WMIがフォルダをロックしてしまうので、リネームが出来なくなります。
止めても勝手にリスタートしてしまうトラップにハマりかけましたが、急いでリネームを繰り返したら間に合って成功し、事なきを得ました。
(3)成功するとRepositoryフォルダが再作成されて復旧します!!
リスタートは勝手になる(なった)んですが、もしもリスタートしない時は以下のコマンドでリスタートします。
NET START WINMGMT
当該のフォルダが無いと、WMIが作り直してくれるので、それが完了すると復旧となります。
アプリケーションはだいたい1分後くらいに使用開始すると良い感じです。※時間は計測したわけではなく体感
上記の話は、私が実際にやってみてこうだった、という話であって、全員が同じとは限らないのですが...。
そもそも何でWMIが破損するのだろう...。