2009-10-09 36 views
8

現在、すべてのアップグレードは新しいバージョン番号に更新すると正常に機能しますが、ダウングレードすると奇妙な動作になります。それは、既存のバージョンをアンインストールし、私がインストールしようとしているバージョンを部分的にインストールすると思われますが、メインのexeファイルはまだターゲットの場所には存在しませんが、アドバタイズされたショートカットが作成されます。アドバタイズされたショートカットが開かれると、インストールが完了します(おそらく修復を行います)。その後正常に動作します。WiX「メジャーアップグレード」でダウングレード時にアプリが完全にインストールされない

これはなぜ起こっているのですか?

私のアップグレードブロックは次のようになります。私は私のInstallExecuteSequenceで

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(IgnoreRemoveFailureは、この問題を解決しようとする試みだったが、何を行っているようには見えない)

<RemoveExistingProducts After="InstallValidate" />

はまた、私はProduct Id="*"Package Id="*"

を持っています

ダウングレードが必要な理由は、互換性を保証するためにクライアントアプリケーションがサーバーと同じバージョンを実行する必要があり、プロセス全体を自動化する必要があるためです。クライアント/サーバーのバージョンがユーザーに一致しない場合「はい」をクリックするだけで、適切なバージョンがダウンロードされ、インストールされ、開始されます。これはこれまでのところアップグレードのために働いていますが、ダウングレードの場合は、手動でアプリケーションを再起動し、起動する前にWindowsインストーラダイアログのポップアップが表示されるように、直感的ではありません。

アップグレードまたはダウングレードに関係なく、現在のバージョンを完全にアンインストールする必要があり、ダウンロードされたバージョンが完全にインストールされているため、これを達成する別の方法がある場合は、それも良い答えです。

+0

私は今日もこれに無限の問題を抱えています。 WiXは物事を間違ってしまうようにするための新しい「MajorUpgrade」要素を追加しました。私たちはこれを今使っていますが、それでもダウングレードには以前と同じ問題があります。今の違いは、(1)InstallExecuteSequence(2)UpgradeVersion要素です。 – Trejkaz

答えて

2

ダウングレードを許可することは、少なくとも部分的には、サポートするすべての組み合わせをテストすることがまだ困難なため、ベストプラクティスとはみなされません。代わりにこのケースを検出してブロックすることは現実的ではありません(新しいバージョンを先に削除することを提案してください)。

ダウングレードインストールの冗長ログには何かがありますか(または修復のために、マシンのロギングポリシーを設定してこれを作成する必要があります)、メジャーアップグレードを確認します(私はFindRelatedProductsの近くに)見るか、またはあなたのexeのコンポーネントがインストールされていない理由について説明しますか?マイナーアップグレードのシナリオで説明できるように、間違いなくログの行がSELMGRであることを確認してください。

アドバタイズされたショートカットが設定されているため、コンポーネントが広告されたように聞こえます。 Product/@Id='*'がメジャーアップグレードを強制する必要があるように見えますが、マイナーアップグレード(旧バージョンでの削除のような新しいバージョンのコンポーネントの追加 - HeathSのcommentaryを参照)でのコンポーネントルール違反を示す可能性があります。

単一の機能、単一のコンポーネント、およびショートカットを持つ単一のファイルを持つ基本バージョンからサンプルプロジェクトで作業してみることもできます。関連する場合は、アップグレードされたバージョンに別のコンポーネントとファイルを追加します。それ以外の場合は、ファイルのバージョンをインクリメントします。その後、逆のシナリオを試してください。ゆっくりとあなたの犯人を見つけるまで事を追加してください。それから、あなたが実際の製品から取り除くことができるか、そうでなければ取り組むことができることを望みます。

1

私の提案は、「作ってみてください」という側面に少しあります。ダウングレードの場合は、サイレント修復カスタムアクションを試すことができます。

+0

カスタムアクションとして修復をスケジュールする方法が見つかりませんでした。これを説明するリンクはありますか? – Davy8

+0

私はmsiexecでカスタムアクションを実行し、ソースとしてmsiを使用するようなものを考えていました。(msiexec/fa prod.msi/qn) – Gabriel

+0

一度に複数のWindowsインストーラインスタンスを実行できるかどうか不安です。この場合、2つあります。 1つは別のものの中から実行します。 – w4g3n3r

0

2つの「UpgradeVersion」要素を使用するとどうなりますか?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" /> 
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" /> 
1

InstallExecuteSequenceでどのように操作を注文しましたか?

インストール後にアンインストールを実行すると(アップグレードのパフォーマンスが向上します)、ファイルのバージョンが下位バージョンに変更されると問題が発生することがあります。これはあなたの格下げの場合である可能性があります。

明示的に尋ねない限り、Windowsインストーラは古いバージョンを新しいバージョンで上書きしません。

インストールする前にアンインストールして再インストールすると、このような場合に役立ちます。

+0

アンインストールはインストール前に指示されています。私がそれを再スケジュールするまで、アップグレードの前にその問題を抱えていた。今はアップグレードで動作しますが、引き続きダウングレードに問題があります – Davy8

3

これが私の仕事です:

<Wix ...> 
    <Product ...> 
    <Property Id="REINSTALLMODE" Value="amus" /> 
    <MajorUpgrade AllowDowngrades="yes" /> 
+0

これは受け入れられる回答になるはずです。バージョンが異なる場合にのみ、ファイルを上書きするために "amus"の代わりに "dmus"を使用しましたが、これは私のためにも機能しました。ここにあるフラグの完全な一覧:https://msdn.microsoft.com/en-us/library/aa371182%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 –

関連する問題