2016-05-12 47 views
1

私はWiXを使用してMSIインストーラを構築しています。インストールされる製品にはVC++ランタイムが必要なので、(a)対応するマージモジュールを使用し、(b)実際の製品のMSIより前にvcredistを実行するためにburnを使用するという2つのオプションがあります。これらの2つのオプションの間で異なるために私は情報を見つけられなかったいくつかの質問があります。WiX - VC++ランタイム - vcredistとマージモジュール

1)マージモジュールを使用している場合は、ランタイムは別途インストールされません(追加と削除のプログラムにはエントリがありません)が、理解できる限り、必要なファイルが対応する場所にコピーされます。

1.1)すでにシステムにvcredistがインストールされている場合、マージモジュールは製品のインストール中に何もしないと思いますか?

1.2)1.1で述べたようなvcredistのインストールがあった場合、ユーザーは単にプログラムの追加と削除でそのランタイムをアンインストールするだけですか?私は製品がもう動作しないと思う。(少なくとも、修復インストールが実行され、MSIのマージモジュールに必要なファイルが再追加されるまで)

1.3)vcredistがまだインストールされていないとMSIインストーラーがファイルをシステムにコピーした後、別のインストーラーまたはユーザーがvcredist.exeを呼び出して何が起きていますか? vcredistはランタイムを既にインストールされていると報告しますか?

1.4)製品をアンインストールすると、マージモジュールを介してシステムにコピーされたファイルが削除されますか?

1.5)1.4)yes(VC++ランタイムファイルが削除されている場合):同じマージモジュールを内部的に使用し、2つの製品のいずれかがアンインストールされている2つの異なる製品がシステムにインストールされている場合インストールされたランタイムファイル?ランタイムファイルがないため、これらのファイルは削除され、他の製品はもう機能していませんか?

ご協力いただきありがとうございます。

よろしく、 グンナー

答えて

4

マージモジュールをインストールするだけで一貫した方法である(通常は共有)のビルドでそれらを含めることによって、適切にファイル。同様に、C++コンパイラはexeに結合された.objファイルをビルドしますが、exeがビルドされて実行された後は別の存在を持つobjについては話すことができません。マージモジュールと同じです。 MSIに入ったら、インストールするファイルだけで、標準のルールに従います。ファイルが既に(共有の場所に)インストールされている場合は、着信バージョンがすでにインストールされているバージョンよりも高い場合は上書きされます。そのコンポーネントを含むコンポーネントは1つカウントアップされ、コンポーネントを使用して他の製品(VC redistを含む)をアンインストールすると、ファイルを使用している製品が破損しないようにカウントダウンされます。これは、製品間で共有されるファイルの標準的な共有方法であり、VC redistとMSIの違いはありません。あなたの製品のいくつかがマージモジュールを使用してファイルをインストールするのと同じように簡単にできます。また、共有カウントと共通のコンポーネントIDが共有作業を意図した通りにしているため、したがって、1つの製品がVC redistであり、もう1つはあなたのもの(または同じファイルを使用する別の製品)です。これはWindowsインストーラの共有ファイル/参照カウントメカニズムだけです。

これは、ファイルをシステムフォルダにインストールする最近のマージモジュール用です。 WinSxSとポリシーリダイレクトを使用する他のスキームが現在使用されていないようです(VS 2015)。

+0

ご清聴ありがとうございます。vcredist.exeでBurnを使用することを推奨するいくつかの記事と説明を見つけ、マージモジュールを使用しない理由をわかりやすく伝えることなく、それらをマージモジュールの使用法と連動させてインストールした製品を勧めました。ブートストラッパはmsiファイルの代わりに常にexeファイルを作成するので(後者は私の会社のインストーラを配布するための好ましい方法です)、MMの代わりにvcredist.exeチェインを実際に使用する必要があるかどうかは不思議でしたその場合には。 – Gunnar

関連する問題