Verhindern der Installation eines alten Pakets, wenn bereits eine neuere Version vorhanden ist

Windows Installer-Upgradepakete können so erstellt werden, dass größere Upgrades nicht installiert werden, wenn ein Benutzer bzw. eine Benutzerin bereits eine neuere Version installiert hat. Das Verfahren in diesem Thema kann nur Downgrades verhindern, die durch die Ausführung eines Pakets mit einem größeren Upgrade verursacht werden können. Dieses Verfahren basiert auf der FindRelatedProducts-Aktion, die nur während einer erstmaligen Installation und nicht im Wartungsmodus (erneute Installation) ausgeführt wird. Da kleinere Upgrades mithilfe der erneuten Installation durchgeführt werden, kann dieses Verfahren nicht verwendet werden, um zu bestimmen, ob ein Paket mit einem kleineren Upgrade versucht, eine Anwendung herabzustufen. Weitere Informationen finden Sie unter Vorbereiten einer Anwendung für zukünftige größere Upgrades.

So verhindern Sie, dass ein altes Paket installiert wird, wenn bereits eine neuere Version vorhanden ist

  1. Geben Sie die Eigenschaft UpgradeCode für die Gruppe verwandter Produkte, die möglicherweise für dieses Upgrade berechtigt sind, in die Spalte „UpgradeCode“ der Tabelle „Upgrade“ ein.

  2. Geben Sie in der Spalte „Attributes“ der Tabelle „Upgrade“ das Bitflag msidbUpgradeAttributesOnlyDetect ein.

  3. Geben Sie die Version des von diesem Paket bereitgestellten Upgrades in die Spalte „VersionMin“ der Tabelle „Upgrade“ ein. Lassen Sie die Spalte „VersionMax“ leer.

  4. Geben Sie den Namen der Eigenschaft, die durch die FindRelatedProducts-Aktion festgelegt werden soll, in die Spalte „ActionProperty“ der Tabelle „Upgrade“ ein.

  5. Fügen Sie die Eigenschaft SecureCustomProperties und die Eigenschaft mit dem Namen in der Spalte „ActionProperty“ der Tabelle „Upgrade“ zur Tabelle „Property“ hinzu.

  6. Fügen Sie in der Tabelle InstallExecuteSequence einen benutzerdefinierten Aktionstyp 19 nach der Aktion „FindRelatedProducts“ hinzu. Fügen Sie einen Datensatz in die Tabelle „CustomAction“ für diese Aktion ein, und geben Sie den anzuzeigenden Text in die Zielspalte ein. Der benutzerdefinierte Aktionstyp 19 ist in das Installationsprogramm integriert, sodass kein Code geschrieben werden muss.

  7. Geben Sie den Namen von „ActionProperty“ in die Spalte „Condition“ des Datensatzes in der Tabelle „InstallExecuteSequence“ ein, die den benutzerdefinierten Aktionstyp 19 enthält. Dadurch wird festgelegt, dass die benutzerdefinierte Aktion nur ausgeführt wird, wenn die Tabelle „Upgrade“ 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, InstallExecuteSequence und Property enthalten. Alle verwandten Produkte in der Gruppe verfügen über denselben Upgradecode, aber das Installationsprogramm installiert dieses Upgradepaket nicht, wenn bereits eine höhere Version als 3.0 auf dem Computer installiert ist. In diesem Fall zeigt das Installationsprogramm eine Fehlermeldung an, und die Installation ist nicht erfolgreich. Das Upgradepaket für Version 3.0 wird installiert, obwohl die Versionen 1.0 und 2.0 bereits vorhanden sind.

    Tabelle „Upgrade“

    UpgradeCode VersionMin VersionMax Sprache Attribute Remove (Entfernen) ActionProperty
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3.0   msidbUpgradeAttributesOnlyDetect NEWPRODUCTFOUND
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1.0 3.0 msidbUpgradeAttributesVersionMinInclusive UPGRADEFOUND

     

    Tabelle „CustomAction“

    Aktion type `Source` Ziel
    KA1 19 Ein höheres Upgrade ist bereits installiert.

     

    Tabelle „InstallExecuteSequence“

    Aktion Bedingung Sequenz
    FindRelatedProducts 200
    KA1 NEWPRODUCTFOUND 201

     

    Tabelle „Property“

    Eigenschaft Wert
    SecureCustomProperties NEWPRODUCTFOUND;UPGRADEFOUND