2012-02-28 10 views
8

私は相当に大きなWiXインストーラ(250Mbプラス)を持っており、私は適切なアップグレード戦略を考え出しています。WiXインストーラで製品のアップグレードをどのように処理すればよいですか?

インストーラのほとんどのファイルは変更されません.1つまたは2つのファイルが変更された場合、パッケージ全体を配布する必要はありません。

私はメジャーアップグレードとマイナーアップグレードを検討しましたが、製品IDが変更された場合、アップグレードIDが同じであればメジャーアップグレードが行われ、これらの値が残っている場合はマイナーアップグレードパッチが使用できる同じ。

パッチを使用したマイナーアップグレードは、少数のファイルしか変更しない場合や、相当数のファイルが変更された場合にのみインストーラ全体を再構築する場合に最適なオプションです。

"torch"を使って2つの "wixpdb"ファイルの違いに基づいて "wixmst"ファイルを作成し、そこからパッチを作成しました。しかし、あるバージョンから別のバージョンへのパッチ適用しかできないことが判明しました(1.0.0から1.0.1、1.0.1から1.0.2など1.0.0から1.0.2など)。パッチの最小バージョンをターゲットにして、それより上のバージョンをサポートすることは可能ですか?

答えて

8

パッチを当てることは苦痛なので、それを習得する際に多くの準備をしてください。あなたのために役立つ別の戦略があります。 MSIを2 MSIに分割します(マイクロソフトはこのマイクロパッケージと呼んでいます)。変更されないことが予想される大部分のコンテンツを含む基本MSIと、高いチャーンになると予想されるファイルを含む第2のMSIがあります。

次に、Burnを使用してこれらを連鎖させて一緒にアンインストールするブートストラップを使用します。これはVisual Studioの機能に似ています。

これで、2番目のMSIのメジャーアップグレードを出荷できます。

+0

私は個別のMSIを作成することも考えていました。アドバイスありがとうございます。 –

2

私は、パッチがアンインストール可能である限り、上記のシナリオでパッチを適用することは可能だと考えています。シナリオ例は次のようになります

  1. MSI(v1.0の)
  2. MSPをインストールします(v1.0を - V1.1)
  3. アンインストールMSP(バックv1.0のために)、次いでインストールMSP(V1をhttp://wix.sourceforge.net/manual-wix3/patch_restrictions.htm とWindowsのマニュアル:http://msdn.microsoft.com/en-us/library/aa372102.aspxから0.0 V1.2)アンインストールパッチの詳細については

、WiXのマニュアルを参照してください。

アンインストール可能なパッチを作成するには、特定の制限があり、WiX 3.0以上である必要があります。

クリストファーが言及したように、パッチを当てることは苦しいことがあります。多くの場合、管理者はパッチのアップグレードを実行する機能を求めていることがあります。これは、ユーザーが最初に手動でインストールすることなくアップグレードできることを意味しています。

つまり、頻繁にダウンロードされる小規模な更新プログラムが多く必要なお客様がいる場合は、パッチを当てることで余計な手間がかかります。

+0

私が考えたことは、ビルドプロセスを検討する必要があることです。管理者は、ファイルが少数しか変更されない場合でも回帰テストを行う必要がないと考えているため、パッチを求めることがあります。しかし、すべてのビルドでdllをバージョンアップし、2つのビルドの間にパッチを作成しようとすると、パッチをインストールした後、パッチサイズが小さくても、各dllのバージョン変更が表示されます。マネージャとテスターがこれを見ると、それは驚くかもしれません。 – BryanJ

+0

ご回答いただきありがとうございます。私たちには、今のところ十分なパッチを当てているものがあります。しかし、長期的には、2つのMSIを作成するというChristopherの提案に傾いていると思います。 –

0

クリストファーズは彼がwixブートストラップを提案している点で素晴らしいと答えていますが、私は「高チャーン」パッケージの主要な更新を行うルートを止めるでしょう。問題は、内部でHighChurn.msiの揮発性ライブラリをバージョンv1.0からv1.1に大幅にアップグレードしたブートストラップパッチを実行した後で、ブートストラップは私の知るところでは以前のバージョンを再インストールしないv1.0でHighChurn.msiのパッケージ。

別のパスがあります。メインパッケージのリリースを対象としたパッチを作成できます。あなたが書いたことを考えれば、私は完全にはわかりませんが、あなたの1.2パッチが1.1にしか適用できないならば、あなたはおそらく1.0に対して1.0に対して1.2に対して違うでしょう。

ここでパッチを作成するために、どのようにきちんとしたガイドです:あなたはhttps://www.firegiant.com/wix/tutorial/upgrades-and-modularization/patchwork/

は、V1.2は、V1.1が出荷され、すべてを無効に作ってあげる、[PatchFamily/@代わる](パッチに取って代わるか、そのガイドに従ってください、そうv1.1ではなくv1.2パッチを作成するように強制されています)、上位バージョンが存在するにもかかわらず、このフラグをパッチ要素に追加してください:Patch/@MinorUpdateTargetRTM="yes"。リリースインストーラ(HighChurn.msi v1.0)に対してパッチを常に比較し、パッチ用に使用したインストーラ(HighChurn.msi v1.1)に対しては絶対にしないでください。

パッチをインストールするために特定のアップグレードが必要な場合もあります。例えば、パッチ1.1.1にはリリース1.0の上にインストールされたService Pack 1.1が必要です。

あなたの揮発性のデータをパッチする最後の言葉(私はここでバージョン管理されたライブラリを想定しています):あなたは基本的にパッチで置き換えることができるlibsを知りたいかもしれません。そして、変更されたライブラリにより高いバージョンを与えることで、ごくわずかなデータでパッチを作成することができます。すべてのライブラリのバージョンを増やすと、すべてのライブラリにパッチが適用され、パッチが大きくなります。これは若干複雑なビルドワークフローを必要とするかもしれません(神が私たちのためにやったことを知っています)。

関連する問題