NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

非WIXインストーラによるプロダクトがイントール済みか判定 by WIX

投稿者:やっさん  2013/05/16 17:52  MLNo.2947   [メール表示]

お世話になります。
旧プロダクト検出について悩んでいます。

今開発しているWIX版インストーラは、既存のInstallShieldによるインストーラからの脱却・移行を目的としたものです。
なので、過去バージョンの検出をするにあたっては
・WIX版インストーラでの今後のバージョンアップを意識した新旧チェック
だけでなく
・旧来のInstallShield版がインストールされているかどうかチェック
も必要なのです。
前者についてはUpgradeCodeでインストール済みバージョンを確認する仕組みを
実装済みです。

InstallShield版とWIX版とでUpgradeCodeを同じにしてしまえば
上記の2つを別々に検証する必要はないと思うのですが、
InstallShield版からUpgradeCodeを見つけられずに困っています。

InstallShield版のsetup.exeを実行したとき「ようこそ画面」表示時に、
exeに内包したmsiファイルがtempフォルダに展開されていることを知ったので、
そのmsiファイルを抜き出してみてorcaに食わせてみました。
が、Upgaradeの項目に情報はありませんでした。
或いはInstallShieldのソースコード(ismファイル)の中も観察してみましたがそれらしき情報は見当たりません。

これはつまりどういうことなのでしょう?
UpgradeCode使用していないインストーラということなのでしょうか?
もしそうならば、どのようにしてインストール済みかどうかを判別したらよいのでしょうか?
(InstallShield版の同士では新旧比較できているので、検出する手がかりはどこかにあるはず)
ちなみにProductCodeは分かりましたが、これはインストーラをビルドする度に振り直しているので手がかりにはできないです。

何かご存知でしたら教えて下さい。
よろしくお願いいたします。


なお、InstallShieldのバージョンはよくわかりません。ごめんなさい。
手元にあるismを見てみると
<msi version="2.0" xmlns:dt="urn:schemas-microsoft-com:datatypes">
というタグがあるのでmsiバージョンは2.0みたいです。


このエントリーをはてなブックマークに追加


  • MLNo.2948   とっちゃんさん  (0) 2013/05/16 18:24  [メール表示する]
    とっちゃんです。

    >・旧来のInstallShield版がインストールされているかどうかチェック
    >も必要なのです。
    >前者についてはUpgradeCodeでインストール済みバージョンを確認する仕組みを
    >実装済みです。
    >
    ISでビルドしているものが msi 形式であれば、Property に
    UpgradeCode があると思います。

    それを調べれば値がわかると思いますよ。

    UpgradeCode は自身のコードについては、Property の該当のものを
    インストール済みの確認の場合は、Upgrade Table に記載されているものをそれぞれ参照します。

    >なお、InstallShieldのバージョンはよくわかりません。ごめんなさい。

    ISはどれで作成したかを調べたいという場合は
    エクスプローラでmsiファイルのプロパティを表示し、詳細のプログラム名(Win8の場合)を
    見ることで判断できます。

    OSによって表示方法とかが違いますが、プロパティを見れば必ずわかりますよ。


    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/
    // Microsoft MVP for Developer Tools - Visual C++
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.2949   やっさん  (0) 2013/05/16 19:27  [メール表示する]
    毎度即レス頂き恐縮です。

    Orcaで見たときにはPropertyにもUpgradeCodeがなかったような気がするのですが。。

    ともあれ後日確認して再度返信します。
    取り急ぎお礼まで(^^)d
    2013/05/16 18:24 "とっちゃん(高萩 俊行)" <tosiyuki@…>:

    > とっちゃんです。
    >
    > >・旧来のInstallShield版がインストールされているかどうかチェック
    > >も必要なのです。
    > >前者についてはUpgradeCodeでインストール済みバージョンを確認する仕組みを
    > >実装済みです。
    > >
    > ISでビルドしているものが msi 形式であれば、Property に
    > UpgradeCode があると思います。
    >
    > それを調べれば値がわかると思いますよ。
    >
    > UpgradeCode は自身のコードについては、Property の該当のものを
    > インストール済みの確認の場合は、Upgrade Table に記載されているものをそれぞれ参照します。
    >
    > >なお、InstallShieldのバージョンはよくわかりません。ごめんなさい。
    >
    > ISはどれで作成したかを調べたいという場合は
    > エクスプローラでmsiファイルのプロパティを表示し、詳細のプログラム名(Win8の場合)を
    > 見ることで判断できます。
    >
    > OSによって表示方法とかが違いますが、プロパティを見れば必ずわかりますよ。
    >
    >
    > // とっちゃん(高萩 俊行)
    > // http://blogs.wankuma.com/tocchann/
    > // Microsoft MVP for Developer Tools - Visual C++
    > // WindowsInstallerの話題は http://www.freeml.com/msi まで
    >
    >
    > MLホームページ: http://www.freeml.com/msi
    >
    > ----------------------------------------------------------------------
    > 練習や試合の予定調整は「とっとと決め太郎」におまかせ!
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=jRy4L
    > ------------------------------------------------------[freeml byGMO]--
    >
    >
    このMLメールはHTML形式でメール投稿されています。HTML形式で表示

  • MLNo.2950   とっちゃんさん  (0) 2013/05/16 20:36  [メール表示する]
    とっちゃんです。

    >Orcaで見たときにはPropertyにもUpgradeCodeがなかったような気がするのですが。。
    >
    あ。。。ないかも。。。なしも作れた気がします。

    もし、なかった場合ですが
    UpgradeCode がないということは、ProductCode を使って検索するしか
    選択肢がないことになります。

    この場合、IS時代にどうやって旧製品をチェックしていたかを調べる必要があります。

    自前でブロック処理を織り込んでるとなると、無限に存在する方法から絞り込むことになるので
    もう少し情報がないと厳しいですね。
    #もしIS時代の実装を大雑把にでも聞ける人がいれば、その人にヒントをもらうことをお勧めします。


    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/
    // Microsoft MVP for Developer Tools - Visual C++
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.2951   やっさん  (0) 2013/05/17 17:35  [メール表示する]
    >あ。。。ないかも。。。なしも作れた気がします。

    やはりなかったです。。
    で、よくよく確認してみたところ、当方のIS版は実はProductCodeが不変になっていることが分かりましたw
    同一ProductCodeの中でMajorVersion,MinorVersionで過去バージョンのチェックをしていたようです。
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\xxxxxxxx
    の中身をRegistrySearchして判定できそうです^^;

    ちなみにアンインストールしたときに上記xxxxxxxがまったく異なる新しいGUIDに置き換わり、イントール履歴?としてレジストリ内残っていました(NoRemove:1 NoModify:1になっている)。
    これのせいでバージョンごとにProductCodeが設定されているのかと勘違いしてしまった次第です・・


    お騒がせしました。
    ありがとうございました。


メールへの返信はMLのメンバーしかできません。

更新順メールリスト