| 著作一覧 |
ムムリクさんの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を付けるかどうかはちょっと判断保留。
ジェズイットを見習え |