0

さまざまな場所で、「特定のユーザーが以前のバージョンの製品をインストールしていない場合、完全なMSIパッケージとしてパッケージ化された更新プログラムは初回インストールとして動作する可能性がある」と同様のステートメントを読みました。

しかし、これを行うのは難しいことが証明されています。

うまくインストールできるインストールパッケージがあります。しかし、以下のUpgrade要素を追加すると、初回インストールが実行されなくなります。

<Upgrade Id="DE3F65C6-FAAF-4FE0-8D3A-87E4A1F5E36F">
    <UpgradeVersion OnlyDetect="no" Minimum="4.1.0.0" IncludeMinimum="yes" Maximum="5.0.0.7" IncludeMaximum="no" Property="PREVIOUSVERSIONFOUND" />
</Upgrade>

上記のIDは、Product要素のUpgradeCode属性と同じです。そのアップグレード要素で私がすべきことがあると確信していますが、誰かが私に何を教えてもらえますか?

4

2 に答える 2

2

StackOverflow は「私はばかだと叫びながら額をヒット」バッジを授与しますか?

問題は、私が探していた場所のどこにもありませんでした。私の質問への回答を探している他の人がここに来るように、本当の答えは、質問で参照した要素を含めることです (明らかに、特定の状況に合わせて ID とバージョン番号を変更します)。

私のパッケージにもあります

    <InstallExecuteSequence>
        <RemoveExistingProducts Before="InstallInitialize" />
    </InstallExecuteSequence>

絶対に必要ではないかもしれませんが、機能します。

于 2013-02-28T16:16:19.657 に答える
2

ここで発生する可能性のある問題の 1 つは、Windows インストーラーがバージョン番号の最初の 3 つの値しか考慮しないという事実です。Microsoft によると、4 番目の数字は純粋に内部ビルド追跡用であり、リリースされたインストーラーは気にする必要はありません。

したがって、Windows インストーラーは 5.0.0.1 を 5.0.0.30 と同じバージョンとして認識します。

また、何らかの複雑なアップグレード ロジックが必要な場合を除き、MajorUpgrade代わりに要素を使用することをお勧めします。これにより、標準のメジャー アップグレードを実行するパッケージを作成するだけの多くの苦痛が取り除かれます。それに関するドキュメントはここにあります

もう 1 つの混乱のポイントは、内部ではインストーラーが基本的にメジャー アップグレードをアンインストールとそれに続く新たな再インストールとして扱う一方で、セットアップした UI が同じように動作しない可能性があるという事実です。デフォルトの UI ダイアログ セットの 1 つ。

于 2013-02-27T10:11:15.877 に答える