Verhindern der Installation eines alten Pakets über eine neuere Version
Windows Installationsupgradepakete können so verfasst werden, dass größere Upgrades nicht installiert werden, wenn ein Benutzer bereits eine neuere Version installiert hat. Das Verfahren in diesem Thema kann nur Downgrades verhindern, die durch die Ausführung eines größeren Upgradepakets verursacht werden können. Dieses Verfahren basiert auf der Aktion FindRelatedProducts,die nur während einer erstmaligen Installation und nicht im Wartungsmodus (Neuinstallation) ausgeführt wird. Da kleinere Upgrades mithilfe der Neuinstallation ausgeführt werden, kann dieses Verfahren nicht verwendet werden, um zu bestimmen, ob ein kleineres Upgradepaket versucht, eine Anwendung herabstufen zu lassen. Weitere Informationen finden Sie unter Preparing an Application for Future Major Upgrades.
So verhindern Sie, dass ein altes Paket über eine neuere Version installiert wird
Geben Sie die UpgradeCode-Eigenschaft für die Gruppe verwandter Produkte, die möglicherweise für dieses Upgrade berechtigt sind, in die Spalte UpgradeCode der Upgradetabelle ein.
Geben Sie das Bitflag msidbUpgradeAttributesOnlyDetect in der Spalte Attribute der Upgradetabelle ein.
Geben Sie die Version des Upgrades, das von diesem Paket bereitgestellt wird, in die Spalte VersionMin der Upgradetabelle ein. Lassen Sie die Spalte VersionMax leer.
Geben Sie den Namen der Eigenschaft, die von der Aktion FindRelatedProducts festgelegt werden soll, in die Spalte ActionProperty der Upgradetabelle ein.
Fügen Sie der Eigenschaftentabelle die SecureCustomProperties-Eigenschaft und die Eigenschaft namens in der ActionProperty -Spalte der Upgradetabelle hinzu.
Fügen Sie nach der Aktion FindRelatedProducts in der InstallExecuteSequence-Tabelleeinen benutzerdefinierten Aktionstyp 19 hinzu. Schließen Sie einen Datensatz in die CustomAction-Tabelle für diese Aktion ein, und geben Sie den Text ein, der in der Spalte Ziel angezeigt werden soll. Die benutzerdefinierte Aktion vom Typ 19 ist in das Installationsprogramm integriert, sodass kein Code geschrieben werden muss.
Geben Sie den Namen der ActionProperty in die Spalte Bedingung des Datensatzes in der InstallExecuteSequence-Tabelle ein, die den benutzerdefinierten Aktionstyp 19 enthält. Dadurch wird die benutzerdefinierte Aktion nur ausgeführt, wenn die Upgradetabelle erkennt, dass bereits eine neuere Version installiert ist.
Beispielsweise kann ein Windows Installer-Paket, das eine Gruppe verwandter Produkte auf Version 3.0 aktualisiert, die folgenden Datensätze in den Tabellen Upgrade, CustomAction, InstallExecuteSequenceund Property enthalten. Alle zugehörigen Produkte in der Gruppe verfügen über den gleichen UpgradeCode, aber das Installationsprogramm installiert dieses Upgradepaket nicht, wenn bereits eine Version höher als 3.0 auf dem Computer installiert ist. In diesem Fall zeigt der Installer eine Fehlermeldung an, und die Installation schlägt fehl. Das Upgradepaket der Version 3.0 wird über die Versionen 1.0 und 2.0 installiert.
Upgradecode VersionMin VersionMax Sprache Attributes Remove (Entfernen) ActionProperty {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3.0 msidbUpgradeAttributesOnlyDetect NEWPRODUCTFOUND {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1.0 3.0 msidbUpgradeAttributesVersionMinInclusive UPGRADEFOUND Aktion type SourceZiel KA1 19 Ein höheres Upgrade ist bereits installiert. InstallExecuteSequence-Tabelle
Aktion Bedingung Sequenz FindRelatedProducts 200 KA1 NEWPRODUCTFOUND 201 Eigenschaft Wert SecureCustomProperties NEWPRODUCTFOUND; UPGRADEFOUND