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>