ClassGUIDを返さないデバイスがあった
社内で使う簡単なツールを作っているのだけど、特定のPCでのみ動作しないということで、調べてみた。
調べていくと、エラーが発生する箇所はWMIでデバイス情報を取得しているところだった。Win32_PNPEntityクラスからデバイスを列挙して、そこからClassGUIDをチェックして目当てのデバイスを探し出し、その情報をもとにゴニョゴニョするというツールなんだけど、特定のPCの特定のデバイスだけClassGUIDが取得できなかった。
エラーの内容を取得してみると、"Could not convert variant of type (Null) into type (String)"、内部でString型のはずのVariant型をString型に変換しようとしたけど、Variant型の方がNULLなんでString型にできませんよという内容。Delphiなんで他のではヌルストリングとかに変換されて事なきを得るのかもしれないけれど。
そのPCというのは全てHP Compaqで、そのデバイスはDeviceIDでいうと"{A87C2E0F-9A46-46B8-8EC4-E33355FBE1F7}KEYBOARDFILTER5&DA02EA7&0&01"とかいうデバイスで、どうもQuick Launchボタンを使うためのものらしい。で、どうしてそれがClassGUIDを持ってないことになってるのかしらんけど、そこでそういう例外を発生して処理を中断してしまっているようだった。
きちんと例外処理して無視するようにしたら当然問題なく動くようになった。最初からそうやって作っとけばいいのだけど、社内でというか部内の限られた人しか使わないものだったし、今まで何年も大丈夫だったので、ついついいい加減なつくりをしてしまった。そんな限られた環境でもきちんと動くようにしないといけないということを考えると、商用のソフトウェアを作る人は大変なんだろうなぁ~・・・。
コメント
こんばんは!!
ものすごくパソコンくわしそうですね!
ぼくはいつも勘でパソコンいじってますよ!
趣味で自作パソコンは作ってますが、なにぶん
素人なのでくわしいことまで理解していません。
すごいな~すごいな~(^0^)/
この辺はごく偏った知識なのでふつう必要とされません
太古の昔、AMDのK6とかの頃は自作PCをいろいろいじってましたけど、
最近はノートパソコン
なので今はkagamiさんの方が詳しいと思いますよ