Windows インストーラで、他のプログラムのインストール先を調べて、そこにインストール

とあるプラグインソフトのインストーラをVSのSetupプロジェクトで作ってまして、
メインアプリケーションのインストール先を調べる手段に困っています。

そのプログラムのインストール先情報は、レジストリを見れば一目瞭然なのですが、
そのインストール先のパスが書かれているキーの途中に、
プログラムのバージョンが入っているのです。

これが曲者で、バージョンが変わるたびに、
インストール先のパスが書かれたレジストリキーが変わってしまう。
Visual Studio付属のSetupプロジェクトの起動条件で、
レジストリを検索しようとしているのですが、
柔軟にできていないので、目的のレジストリを見つけれらない。

ファイル検索で、実行ファイルのパスは取得できるけど、
ファイル名(XXX.exe)入りのパスしか取得できない。

そして、これこそは!と発見した方法。
「Windows インストーラ検索」
起動条件の対象コンピュータの検索に、Windows インストーラの
情報を検索して、インストール先のパスを返してくれる。
ありがたや。

参考リンク1: 起動条件エディタの使い方
参考リンク2: Orcaの入手法

やろうとしてみたところ、なんと!
メインプログラムが Install Shieldでした、、、
つかえねぇ~~~~~

追記:
Install Shieldでも、最近は内部で msi 使っているんですね。
インストーラの実行ファイルを実行後から、インストーラが起動するまでの
ファイルアクセスを Microsoft SysInternals の Filemon で調べたら、
インストーラが TEMP フォルダに msi を解凍していることを突き止めました。

そこで、インストーラをそのままにして、その msi を Orca で表示すると、
求めていた Component Id を取得することができました。
やった~~~~~~~~!

でも、このソフトの場合、 EXE のComponent Id を使うと、バージョン番号が
付いたフォルダ名の上を指しているらしく、ひとつ上のディレクトリが取得できました。
EXEと同じ階層にあるディレクトリの Component Id を使ってみたところ、
EXEのインストールパスが取れました。
やったwwwwwwwwwwwwwwww!

ところで、この Component Id って、バージョンアップで変わらないよね???
不安だ。。。
[PR]
by isoq | 2008-12-24 17:30 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< スレッドでよくやるミス<デッド... 2008年年賀状用フリー素材(... >>