作成したアプリケーションにプラグイン (またはアドオン) をインストールする必要があります。アプリケーションのインストーラーには WiX を使用しています。私の考えでは、プラグインはアプリケーションのオプションの部分です。アプリケーションのファイルシステム構造に統合する必要がありますが、元のアプリケーションのインストーラーを制御できない人でも、後で追加することができます。だから私は、WiX の独創的なメカニズムがすべて不十分であることに気付きました。小規模/マイナー/メジャー アップデートもパッチ メカニズムも、前のフレーズで述べた前提条件に適合していないようです。したがって、私にとって最善の方法は、元のインストーラーがプラグインをインストールする場所を何らかの方法で指定するレジストリ エントリを残し、プラグイン用に別のインストーラーを構築することです。アンインストールをどのように進めるかという問題は未解決のままですが、それは後で処理できる問題です。誰かがより良いアイデアを持っていますか? 私が気付いていないWiXでこれに特化したメカニズムはありますか? アドバイスありがとう、N-Man
2 に答える
レジストリ キーは、これを解決する一般的な方法です。プラグイン ディレクトリを作成する Windows インストーラ中心の方法は、Component を使用してプラグイン ディレクトリを作成し、他のユーザーに Component/@Guid の ComponentSearch を使用させることです。
アプリと同時にプラグインをアンインストールすることは、アンインストールを管理する外部のブートストラップ/チェイナーなしでは困難です (おそらく不可能です)。プラグインのアンインストールをアプリケーションから完全に分離して、個別に削除できるようにする方がはるかに簡単です。
したがって、私にとって最善の方法は、元のインストーラーがプラグインをインストールする場所を何らかの方法で指定するレジストリ エントリを残し、プラグイン用に別のインストーラーを構築することです。
はい、それが標準的なアプローチだと思います。メイン アプリケーションのインストーラーは、次のようにプラグインをインストールする場所に関するレジストリ エントリを残すことができます。
<Registry Id='WritePluginsLoc'
Root='HKLM'
Key='Software\Acme\Foo 1.x'
Name='PluginsLocation'
Type='string'
Action='write'
Value='[PLUGINSFOLDER]' />
プラグイン インストーラーは、次のようにレジストリ エントリを取得できます。
<Property Id="PLUGINSFOLDER">
<RegistrySearch Id='PluginsLocationSearch'
Root='HKLM'
Key='Software\Acme\Foo 1.x'
Name='PluginsLocation'
Type='raw' />
</Property>
メインの製品と共にプラグインを自動的にアンインストールするには、カスタムのアンインストーラー exe を作成する必要があります。この exe は、プラグインの MSI 製品コードを見つける方法を知っている必要がありmsiexec /x
、それぞれに対して起動します。