4

製品の複数のマイナーバージョンをインストールできるようにWiXプロジェクトを構成する必要があります。IE:1.0、1.1、1.3をインストールできます。1.2をインストールしようとすると機能しますが、1.1でインストールしようとすると、先に進む前に以前の1.1インストールがアンインストールされます。

これまでのところ、これは私のUpgradeタグにあるものです:

<Upgrade Id="$(var.UpgradeCode)">
    <UpgradeVersion Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
        Maximum="$(var.VersionNumber)" IncludeMaximum="no" Property="OLDERMINORFOUND"/>
</Upgrade>

UpgradeCodeは私のwxiファイルで定義されたGUIDでMajorMinorVersionあり、と同じですVersionNumberが、ビルドは0(バージョンが1.1.12の場合は1.1.0)です。

私には2つの可能性があると思います:

別のUpgradeVersionタグを作成するか、現在のタグを更新して、次のマイナーバージョンで最大になるようにし、検索から除外します。

<UpgradeVersion Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
        Maximum="$(var.NextMinorVersion)" IncludeMaximum="no"/>

カスタムアクションを使用してNextMinorVersion何らかの方法で設定します。多分代わりにプロパティを使用します。

または、マイナーバージョンが変更されるたびにUpgradeCodeを手動で変更します。または、GUIDの最初の数文字はバージョンを表し、残りは一意ですか?私はそれが良い考えだとは思えませんが...

それで、基本的に、すべてのバージョンに対して1つのセットアッププロジェクトだけを持つことを期待して、これを達成するための最良の方法は何でしょうか?

編集

タグを調べましたがMajorUpgrade、同時に多くのマイナーバージョンを持つように設定することはできないと思います。これに関するどんな光でもありがたいです。

また、関数を使用してバージョン番号を操作するプリプロセッサ拡張機能を作成することも検討したので、次のことができます。

<Upgrade Id="$(var.UpgradeCode)">
    <UpgradeVersion Property="OLDERMINORFOUND"
        Minimum="$(var.MajorMinorVersion)" IncludeMinimum="yes" 
        Maximum="$(myprefix.NextMinor($(var.VersionNumber)))" IncludeMaximum="no"/>
</Upgrade>

詳細については私の答えを参照してください。

4

1 に答える 1

2

そこで、WiXマニュアル(パート1パート2)に従って拡張機能を作成しました。

バージョン番号の文字列(例:1.2.3.4)を受け取り、文字列を解析および分割してバージョンを操作するプリプロセッサ拡張機能を作成しました。

これで、これを.wxsファイルに書き込むことができます。

<Upgrade Id="$(var.UpgradeCode)">
    <UpgradeVersion Property="SAMEMINORFOUND" OnlyDetect="no"
        Minimum="$(var.MajorMinorVersion).0" IncludeMinimum="yes" 
        Maximum="$(version.NextMinor($(var.VersionNumber)))" IncludeMaximum="no" />
    <UpgradeVersion Property="OLDERVERSIONFOUND" OnlyDetect="yes"
        Maximum="$(var.MajorMinorVersion).0" IncludeMaximum="no"/>
    <UpgradeVersion Property="NEWERVERSIONFOUND" OnlyDetect="yes"
        Minimum="$(version.NextMinor($(var.VersionNumber)))" IncludeMinimum="yes"/>
</Upgrade>

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>

version.NextMinorプリプロセッサ拡張機能の呼び出しはどこにありますか。

そのため、マイナーバージョンが一致しない限り、インストーラーは製品のインストールのみを検出し、そこでアンインストールされます。

于 2013-02-06T19:42:03.940 に答える