2016-04-23 4 views
1

私には2つの機能があり、両方ともabc.dllを使用していて、両方ともそれぞれの現在のディレクトリから参照しているとします。ファイル/コンポーネントを再利用してインストーラのサイズを小さくする

ので、出力は次のようになります。私はこのために2つのコンポーネントを作成しました

abc.dll 

  • 特長1

    abc.dll 
    
  • 特長2を。実際には、多くの機能と多くのDLLが共有されています。インストーラのサイズはほぼ1GBです。

    私が探しているのは、IS 2015 professionalを使用してこれを行うよりスマートな方法です。私がこれまで見てきた何

    1. マージモジュールは:これがうまくいくかどうかわからない、また、それは私が手動でファイルをアップグレードする必要があるマージモジュールを維持する必要があるということです。

    2. ダイレクトエディタを使用して、これは機能しませんが、コンポーネントにのみバインドする方法がないため、これは機能しません。

    3. ターゲットシステムに共有ファイルをインストールする隠し機能、これらのファイルをそれぞれの機能にコピーしてこの機能のフォルダを削除するポストスクリプト。

    必要なものを実装するためのベストプラクティス方法はありますか?

+0

同じファイルを2つの異なる場所にインストールしていますか?また、どの機能をユーザーが有効/無効にすることができますか? – yossiz74

+0

異なる場所に同じファイルがあり、機能を有効/無効にすることができます。 –

答えて

0

この場合、最も適切なアプローチは実際にはモジュールをマージすることです。私はなぜそれらを維持することに懸念があるのか​​分かりません。すべてのマージモジュールを作成し、新しく作成したモジュールでメインインストーラをビルドする自動ビルドプロセスが必要です。
しかし、私の意見では、カスタムアクションがたくさんある場合、マージモジュールは少し面倒です。

Windowsインストーラプロジェクトを使用していると仮定して、マージモジュールの代わりに、小さなインストーラにチェーンする小さなMSIパッケージを使用しています(異なる条件で複数のパッケージを連鎖させ、異なるプロパティを提供できます)。ここでも、小さなmsiパッケージをすべてビルドしてメインインストーラをビルドするビルドプロセスが必要です。

この種の「サブプロジェクト」を望んでいない場合は、ポストアクションを含む隠し機能のオプションが受け入れられ、私はそれを見て、何度かやりました。 Windows 7以降をターゲットにしている場合は、物理的にファイルをコピーして削除する代わりに、シンボリックリンク(mklinkコマンドを使用)を使用することができます。これにより、ターゲットシステムでのインストールの足元を減らすことができます。元のファイルを置き換え、すべてのリンクが自動的に更新されます)。

+0

モジュールと出力ディレクトリの間に1:1の関係があるため、マージモジュールは機能しません。 –

+0

また、それぞれのサブmsiがファイルを取得し、再度重複が発生するため、連鎖されたmsiも機能しません。 –

関連する問題