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

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

メジャーアップグレード後にIEでActiveXコントロールが認識されない

投稿者:geyseeさん  2016/09/05 17:08  MLNo.3221   [メール表示]

geyseeです。

お世話になります。

WiX3.6にてActiveXコントロールのインストーラーを作成しています。

現在、ActiveXコントロールをWebからダウンロードしてメジャーアップグレードすることを検討しています。

新しいActiveXコントロールの使用を要求するWebページを開き、ActiveXコントロールをメジャーアップグレードすることはできましたが、
同じWebページに再度アクセスしても、インストール済みのActiveXコントロールのインストールを再度促され続けてしまいます。

Windows Vistaで発生します。

Windows 8.1、7、10では本症状は発生しません。マイナーアップグレードであれば本症状は発生しません。

HTMLのオブジェクトタグは次のように記載しています。

旧バージョンのobjectタグ:<object id='aaa' classid='clsid:xxx' codebase='Installer.exe#Version=1,0,0,0'></object>
  ↓
  ↓メジャーアップグレード
  ↓
新バージョンobjectタグ:<object id='aaa' classid='clsid:xxx' codebase='Installer.exe#Version=1,1,0,0'></object>

メジャーアップグレード後に旧バージョンのobjectタグにWebアクセスしても、インストールを促されますので、
メジャーアップグレードによって、ActiveXコントロールがインストールされていないと誤認するようになったと考えられます。

IE(objectタグ)がどのようにインストール状況を判断しているか知りたいのですが、
ご存知でしたらお教えいただけないでしょうか。

例えば、「このレジストリを見ている」などわかると助かります。


また、メジャーアップグレードとマイナーアップグレードのWiX上の実装違いは、
<Product Id>を変更するかしないか、のみで分けていますが、
メジャーアップグレードにおいて他に必要な記述があれば、ご教示願います。

こちらのメーリングリストで質問するジャンルから少し離れているかもしれませんが、
どうぞよろしくお願い致します。


Gg[ubN}[N


  • MLNo.3222   geyseeさん  (0) 2016/09/07 11:46  [メール表示する]
    geyseeです。

    お世話になります。

    一度手動でアンインストールすると、新しいバージョンを正常にインストールして動作できますので、メジャーアップグレードによるRemoveExistingProductsタグで削除しきれないものがあるのかもしれません。

    メジャーアップグレードで旧バージョンをアンインストールするために、RemoveExistingProductsタグ以外にも指定すべきものがあればお教え頂けないでしょうか。

    症状はVistaだけで発生しているので、最終手段としては、ブートストラッパーにVista以前であればアンインストールを促すダイアログを表示することをを考えています。

    以上、よろしくお願い致します。

  • MLNo.3223   geyseeさん  (0) 2016/09/07 17:46  [メール表示する]
    geyseeです。

    お世話になります。

    >症状はVistaだけで発生しているので、最終手段としては、ブートストラッパーにVista以前であればアンインストールを促すダイアログを表示することをを考えています。

    プロダクトコードを変えているので、ブートストラッパーではなく、WiXインストーラーで判定とアンインストールを促すダイアログを表示したいと思います。

    下記ソースでダイアログを出そうと考えましたが、最後にエラーダイアログが表示されてしまうので具合が悪いです。
    最後にエラーダイアログ以外のダイアログを表示するか、エラーダイアログを表示せずに終了することは可能でしょうか。

    よろしく願い致します。


    <CustomAction Id="InstallAfterUninstall"
    Error="新しい[ProductName]を利用できます。利用するには現在インストールされている[ProductName]をアンインストールする必要があります。" />

    <InstallExecuteSequence>
    <Custom Action="InstallAfterUninstall" After="FindRelatedProducts">PREVIOUSFOUND AND (600>=VersionNT)</Custom>
    </InstallExecuteSequence>

    <InstallUISequence>
    <Custom Action="InstallAfterUninstall" After="FindRelatedProducts">PREVIOUSFOUND AND (600>=VersionNT)</Custom>
    </InstallUISequence>

  • MLNo.3224   とっちゃんさん  (0) 2016/09/07 18:16  [メール表示する]
    とっちゃんです。

    ブラウザのObjectタグはバージョン依存処理なのと、Codebase にcab以外を見たのが初めてなので何とも言えないんですが...

    >下記ソースでダイアログを出そうと考えましたが、最後にエラーダイアログが表示されてしまうので具合が悪いです。
    こっちは、普通にmsiの話なので分かるw

    試したことがないのでできるかどうかわかりませんが

    <InstallUISequence>
    <Show Dialog="FatalError" OnExit="error" Overridable="yes">PREVIOUSFOUND AND (600>=VersionNT)</Show>
    </InstallUISequence>

    という感じで条件を付けてみてはいかがでしょう?

    終了ダイアログに条件を付けたことはないので、できるかどうかわかりませんが
    お手軽に試せるなら、試してみる価値はあると思います。


    あと、Vistaだけとのことですが、そのVistaのIE(ですよね?)のバージョンは
    いくつになっていますか?

    たぶん、OSの問題ではなく、IEのバージョンの違いによる挙動では?という気がします。

    IEの開発キットは持っていないので、IEのObjectタグに関する細かな挙動はわかりませんが
    元々 codebase には、インストーラのcabファイルのURLと、パラメータとしてのバージョン
    という形だったと思うので、exe形式をきちんと理解できていないのかなぁ?という気がします。
    もしかすると、ActiveXコントロールのバージョンと、#Version部分の一致を見てるとかが
    あるのかもしれませんが。

    それ以外では、clsid をバージョンごとに変えるとか。。。
    ここを変えると、新旧で別のActiveXコントロールになるのでインストールパスを変える必要がありますが。

    それくらいしか思い浮かぶところがない。

    あまりお役に立てませんが参考程度まで。

    --------------------------------------------------
    From: geysee <s_kamiya@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3223] Re:Re:メジャーアップグレード後にIEでActiveXコントロールが認識されない

    >geyseeです。
    >
    >お世話になります。
    >
    >>症状はVistaだけで発生しているので、最終手段としては、ブートストラッパーにVista以前であればアンインストールを促すダイアログを表示することをを考えています。
    >
    >プロダクトコードを変えているので、ブートストラッパーではなく、WiXインストーラーで判定とアンインストールを促すダイアログを表示したいと思います。
    >
    >下記ソースでダイアログを出そうと考えましたが、最後にエラーダイアログが表示されてしまうので具合が悪いです。
    >最後にエラーダイアログ以外のダイアログを表示するか、エラーダイアログを表示せずに終了することは可能でしょうか。
    >
    >よろしく願い致します。
    >
    >
    ><CustomAction Id="InstallAfterUninstall"
    > Error="新しい[ProductName]を利用できます。利用するには現在インストールされている[ProductName]をアンインストールする必要があります。" />
    >
    ><InstallExecuteSequence>
    > <Custom Action="InstallAfterUninstall" After="FindRelatedProducts">PREVIOUSFOUND AND (600>=VersionNT)</Custom>
    ></InstallExecuteSequence>
    >
    ><InstallUISequence>
    > <Custom Action="InstallAfterUninstall" After="FindRelatedProducts">PREVIOUSFOUND AND (600>=VersionNT)</Custom>
    ></InstallUISequence>
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >今までダイエットに失敗してきたあなた
    >必見です!!やせる事に特化した専門店
    >ミスパリダイエットセンター☆彡☆彡
    >今なら、5,000円で体験実施中♪
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=plt6A
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.3225   geyseeさん  (0) 2016/09/08 15:13  [メール表示する]
    geyseeです。

    ご返答ありがとうございます。

    > ブラウザのObjectタグはバージョン依存処理なのと、Codebase にcab以外を見たのが初めてなので何とも言えないんですが...

    ActiveXコントロールもアンインストールできるようにしたかったのと、CAB + INFのインストーラ作成方法が良く分からなかったので、
    MSIインストーラーにしました。

    > 試したことがないのでできるかどうかわかりませんが
    >
    > <InstallUISequence>
    > <Show Dialog="FatalError" OnExit="error" Overridable="yes">PREVIOUSFOUND AND (600>=VersionNT)</Show>
    > </InstallUISequence>
    >
    > という感じで条件を付けてみてはいかがでしょう?
    >
    > 終了ダイアログに条件を付けたことはないので、できるかどうかわかりませんが
    > お手軽に試せるなら、試してみる価値はあると思います。

    試してみました。

    症状変わらずエラーダイアログが表示されました。
    Dialog="UserExit"に変更して再確認しましたが、そちらも変化ありませんでした。


    > あと、Vistaだけとのことですが、そのVistaのIE(ですよね?)のバージョンは
    > いくつになっていますか?
    >
    > たぶん、OSの問題ではなく、IEのバージョンの違いによる挙動では?という気がします。

    IE9でした。
    Windows 7とIE9の組み合わせも確認してみましたが、症状発生しませんでしたので、OS依存と思われます。

    挙動がブラックボックスですね。。
    現状はそういうものと認識するしかなさそうです。

    > それ以外では、clsid をバージョンごとに変えるとか。。。
    > ここを変えると、新旧で別のActiveXコントロールになるのでインストールパスを変える必要がありますが。

    互換性を保ちたいので、clsidを変えることはできません。

    もうすぐサポート終了するWindows Vistaだけの話なので、
    見た目が「エラーダイアログで終了」でも許容はできます。


  • MLNo.3226   とっちゃんさん  (0) 2016/09/08 16:45  [メール表示する]
    とっちゃんです。

    >ActiveXコントロールもアンインストールできるようにしたかったのと、CAB + INFのインストーラ作成方法が良く分からなかったので、
    ちょっと検索してみました。

    https://msdn.microsoft.com/en-us/library/aa751974(v=vs.85).aspx

    このあたりですかね?

    日本語だと
    http://eternalwindows.jp/browser/activex/activex07.html
    も参考になると思います(ななめ読みですが)。

    日本語の方はアンインストールについても触れていますね。
    これがいいのかどうかなどはちゃんと読んでないのでわかりません。

    ちなみに、検索ワードは "Activex control inf install" です(Bing検索の結果上位2つ)。


    >症状変わらずエラーダイアログが表示されました。
    >Dialog="UserExit"に変更して再確認しましたが、そちらも変化ありませんでした。

    む。。。残念。ダメなのかぁ。。。


    >IE9でした。
    >Windows 7とIE9の組み合わせも確認してみましたが、症状発生しませんでしたので、OS依存と思われます。
    Win7では改訂されてるのか。IEはかなりの部分でOSと融合してるので
    OS側のフォローも必要なのかもしれません。


    >互換性を保ちたいので、clsidを変えることはできません。
    >
    clsidが違うだけであとは同じという作り方はできますよ?
    まぁそれでも互換性は保てていないともいえるので何とも言えませんが。


    >もうすぐサポート終了するWindows Vistaだけの話なので、
    >見た目が「エラーダイアログで終了」でも許容はできます。

    許容できるのであれば我慢してもらうしかないですね。
    あとは、ブートストラッパー側で、都合の悪い動きを抑制するなり回避するなり
    というくらいしかないと思います。



    --------------------------------------------------
    From: geysee <s_kamiya@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3225] Re:Re: Re:メジャーアップグレード後にIEでActiveXコントロールが認識されない

    >geyseeです。
    >
    >ご返答ありがとうございます。
    >
    >> ブラウザのObjectタグはバージョン依存処理なのと、Codebase にcab以外を見たのが初めてなので何とも言えないんですが...
    >
    >ActiveXコントロールもアンインストールできるようにしたかったのと、CAB + INFのインストーラ作成方法が良く分からなかったので、
    >MSIインストーラーにしました。
    >
    >> 試したことがないのでできるかどうかわかりませんが
    >>
    >> <InstallUISequence>
    >> <Show Dialog="FatalError" OnExit="error" Overridable="yes">PREVIOUSFOUND AND (600>=VersionNT)</Show>
    >> </InstallUISequence>
    >>
    >> という感じで条件を付けてみてはいかがでしょう?
    >>
    >> 終了ダイアログに条件を付けたことはないので、できるかどうかわかりませんが
    >> お手軽に試せるなら、試してみる価値はあると思います。
    >
    >試してみました。
    >
    >症状変わらずエラーダイアログが表示されました。
    >Dialog="UserExit"に変更して再確認しましたが、そちらも変化ありませんでした。
    >
    >
    >> あと、Vistaだけとのことですが、そのVistaのIE(ですよね?)のバージョンは
    >> いくつになっていますか?
    >>
    >> たぶん、OSの問題ではなく、IEのバージョンの違いによる挙動では?という気がします。
    >
    >IE9でした。
    >Windows 7とIE9の組み合わせも確認してみましたが、症状発生しませんでしたので、OS依存と思われます。
    >
    >挙動がブラックボックスですね。。
    >現状はそういうものと認識するしかなさそうです。
    >
    >> それ以外では、clsid をバージョンごとに変えるとか。。。
    >> ここを変えると、新旧で別のActiveXコントロールになるのでインストールパスを変える必要がありますが。
    >
    >互換性を保ちたいので、clsidを変えることはできません。
    >
    >もうすぐサポート終了するWindows Vistaだけの話なので、
    >見た目が「エラーダイアログで終了」でも許容はできます。
    >
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >初回0円!?33か所の全身脱毛で、ムダ毛処理バッチリ。/キレイモ公式
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=pl3Wf
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.3227   geyseeさん  (0) 2016/09/08 18:54  [メール表示する]
    geyseeです。

    とっちゃんさん、ご回答ありがとうございます。

    >> ActiveXコントロールもアンインストールできるようにしたかったのと、CAB + INFのインストーラ作成方法が良く分からなかったので、

    > ちょっと検索してみました。
    > https://msdn.microsoft.com/en-us/library/aa751974(v=vs.85).aspx
    > このあたりですかね?
    > 日本語だと
    > http://eternalwindows.jp/browser/activex/activex07.html
    > も参考になると思います(ななめ読みですが)。
    > 日本語の方はアンインストールについても触れていますね。
    > これがいいのかどうかなどはちゃんと読んでないのでわかりません。
    > ちなみに、検索ワードは "Activex control inf install" です(Bing検索の結果上位2つ)。

    ご情報ありがとうございます。

    英語の情報は開発当時には見つけられていなかった情報ですし、
    日本語の情報の、コントロールのアンインストールは当時理解できていなかったと思われます。

    開発当時の記録を見返していると、VC++ランタイムを個別のインストーラーを使わず、
    INF内でサイドバイサイド配置しようとしていたことにも、苦戦していたようです。

    現状のMSI+ブートストラッパーでは、今回の問題以外にも、IEのDownloaded Program Filesにインストーラーが複数残る場合があるのではないかと懸念しています。

    既存のMSIをCABに入れて、INFで実行することを検討してみても良いかもしれません。

    今回は納期が逼迫しており、CAB+INF形式に変更する為の技術検討と検証の期間がないため、今後の参考としたいと思います。
    今後、新規開発などでCAB対応する際には是非参考にさせて頂きたいと思います。


    >> 互換性を保ちたいので、clsidを変えることはできません。
    >>
    > clsidが違うだけであとは同じという作り方はできますよ?
    > まぁそれでも互換性は保てていないともいえるので何とも言えませんが。

    SDKとしてclsidを外部に公開していますので、clsidを変えると仕様書の変更や場合わけ、外部への連絡、管理など煩雑なので、極力避けたいと思います。

    以上、幅広くご情報頂きありがとうございました。


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