MSDN > MSDN Library > Win32 and COM Development > Administration and Management > Application Installation and Servicing > Windows Installer > Windows Installer Guide > Patching and Upgrades > Major Upgrades > Preventing an Old Package from Installing Over a Newer Version
Windows Installer アップグレード パッケージは、もしユーザーが既により新しいバージョンを インストールしていると インストールされないメジャーアップグレードを持つように書かれる事が あります。このトピック中のやり方は、メジャーアップグレード パッケージの実行によって発生する ダウングレードだけを妨げる事ができます。このやり方は、最初のインストールの時にだけ実行され メンテナンスモード(再インストール)では実行されない、 FindRelatedProducts アクション ( 英語 ) を当てにしています。マイナーアップグレードが再インストールを 使って行われるので、このやり方は マイナーアップグレードがアプリケーションをダウングレード しようとしているかどうかを決定するのに使うことはできません。より多くのインフォメーションに 関しては、 将来のメジャー アップグレードの為の アプリケーションの準備 ( Preparing an Application for Future Major Upgrades ) を見て下さい。
古いパッケージをより新しいバージョンの上にインストールするのを妨げるには
例えば、同族プロダクトのグループをバージョン 3.0 にアップグレードする Windows Installer パッケージは、中に以下のレコード、Upgrade、CustomAction、InstallExecuteSequence、 Property テーブルを含んでいるかもしれません。グループ中の同族プロダクト全てが 同じ UpgradeCode を持っていますが、インストーラーは コンピューター上に 3.0 よりあとのバージョン が既にインストールされていると このアップグレード パッケージをインストールしません。この場合 には、インストーラーはエラーメッセージを出して、インストールは失敗します。バージョン 3.0 アップグレード パッケージは、バージョン 1.0 と 2.0 上でインストールします。
| UpgradeCode | VersionMin | VersionMax | Language | Attributes | Remove | ActionProperty |
|---|---|---|---|---|---|---|
| {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} | 3.0 | msidbUpgradeAttributesOnlyDetect | NEWPRODUCTFOUND | |||
| {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} | 1.0 | 3.0 | msidbUpgradeAttributesVersionMinInclusive | UPGRADEFOUND |
| Action | Type | Source | Target |
|---|---|---|---|
| CA1 | 19 | A higher upgrade is already installed. |
InstallExecuteSequence テーブル ( 英語 )
| Action | Condition | Sequence |
|---|---|---|
| FindRelatedProducts | 200 | |
| CA1 | NEWPRODUCTFOUND | 201 |
| Property | Value |
|---|---|
| SecureCustomProperties | NEWPRODUCTFOUND;UPGRADEFOUND |
英語のページですが、WiX の為に詳しく説明してありました。ぜひ読んで置いて下さい。
Alex Shevchuk 、
si-9
コードページや言語の変更が必要なら、各自で行ってください。
<!-- メジャーアップグレードの話なので ProductCode が別々のはず --> <?define ProductVersion="3.0.0" ?> <?define RTMProductVersion="1.0.0" ?>
<Upgrade Id="ここにプロダクトの(共通した)UpgradeCode を書く">
<UpgradeVersion Minimum="$(var.ProductVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Language="1033"
Property="NEWPRODUCTFOUND" />
<UpgradeVersion Minimum="$(var.RTMProductVersion)"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IncludeMaximum="no"
Language="1033"
Property="UPGRADEFOUND" />
</Upgrade>
<!-- ダウングレードさせない -->
<CustomAction Id="PreventDowngrading"
Error="A higher upgrade is already installed." />
<InstallExecuteSequence>
<Custom Action="PreventDowngrading"
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
<RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
<!-- 上のリンク先 FindRelatedProducts アクションに書いてあるように こちらも必要 -->
<InstallUISequence>
<Custom Action="PreventDowngrading"
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>