著作一覧 |
ムムリクさんのRuby-2.0.0-preview1をインストールを読んでいて(tcltklibは入れたつもりだけど何かパッケージかビルドをミスしたらしい)、インストールディレクトリなら、WMIを使えば簡単に取得できるだろうと試してみた。
# coding : cp932 require 'win32ole' service = WIN32OLE.connect('WinMgmts:Root\\CIMV2') set = service.execQuery("select * from Win32_Product where Name like '%Ruby%'") set.each do |ins| puts ins.Name puts ins.InstallLocation endが、無常な結果となる。
Ruby-1.9.3 ← 空っぽ
はて、と調べると、WMIのInstallLocationプロパティはMSIのカスタムアクション51でAPPINSTALLLOCATIONARPINSTALLLOCATIONへ明示的に設定しなければ、何も入らない仕様らしい。
そういう面倒を不要にするために、Visual Studio Installerを使っているのに、このでくのぼうは既定ではカスタムアクション51のことは何もしない。
それだけではなく、よくよく列挙してみると(上のスクリプトでWQLのWhere以降を削除して全列挙させる)、MS Office、HTCの何か、Intelのいろいろ、Oracle、Adobe以外は誰も設定していない。というか、Visual Studioがそもそも設定していないから、おそらくVisual Studio Installerを作った連中は、カスタムアクション51の存在そのものを知らないのではなかろうか。Oralceは、JDKやJREの位置を調べるのに必要なのでまじめに設定しているのだろう。Adobeもセキュリティアップデートで既存バージョンを調べるためにまじめに設定しているのだな。IntelやHTCはハードウェア屋だからそのあたりはいかにも固そうだ。
というわけで、使えないということはわかった。おれが作るパッケージにカスタムアクション51を付けるかどうかはちょっと判断保留。
ジェズイットを見習え |