2016-06-06 20 views
0

Voraussetzung

Ich verwende WiX Toolset 3.5.Mein letzter Patch ging mit dem falschen UpgradeCode aus. Wie kann ich das in einem späteren Patch beheben?

Ich habe erfolgreich mehrere Patches für mein Produkt veröffentlicht, die denselben UpgradeCode und ProductCode verwenden. Die letzten beiden Patches wurden jedoch fälschlicherweise mit einem anderen UpgradeCode ausgegeben. Diese Patches wurden erfolgreich installiert, aber mein letzter Patch verweigert die Installation.

Hier ist meine Release Geschichte seit der letzten Version MSI:

  1. Installer (10.0.20935.0) mit Upgrade A.
  2. Patch (10.0.21069.0) mit Upgrade A.
  3. Patch (10.0 .21188.0) mit Upgrade A.
  4. Patch (10.0.21334.0) mit Upgrade A.
  5. Patch (10.0.21671.0) mit Upgrade A.
  6. Patch (10 .1.0.264) mit UpgradeCode B.
  7. Patch (10.1.0.21682) mit UpgradeCode C.
  8. Patch (10.2.0.0), die neueste Patch schlägt fehl, unabhängig davon, ob ich Upgrade A, B oder C.

Unten ist die Fehlermeldung, die angezeigt wird, wenn ich versuche 10.2.0.0 zu installieren Patch:

Der Aktualisierungspatch kann nicht vom Windows Installer-Dienst installiert werden, da das zu aktualisierende Programm fehlt oder der Aktualisierungspatch möglicherweise eine andere Version des Programms aktualisiert. Stellen Sie sicher, dass das zu aktualisierende Programm auf Ihrem Computer vorhanden ist und Sie über den richtigen Aktualisierungspatch verfügen.

Der Benutzer darf den Patch nicht installieren.


Frage

ich einen Patch veröffentlichen müssen, die

  • erfolgreich auf die Produktion installiert (10.1.0.21682).
  • ermöglicht mir, weiterhin Patches in der Zukunft zu veröffentlichen.

Wie erreiche ich das?


Was habe ich versucht?

Ich habe folgendes versucht, ohne Erfolg:

  • die Upgradecode an eine sich wandelnde, das heißt derjenige von 10.0.21671.0 und früher.
  • Ändern des UpgradeCode zu B, d. H. Der von 10.1.0.264.
  • Ändern des UpgradeCode zu C, d. H. Der von 10.1.0.21682.
  • Ändern des ProductCode.
  • Erstellen eines Patches direkt von 10.0.21671.0 zu 10.2.0.0 (obwohl natürlich in der Produktion wird es auf 10.1.0.21682 ausgeführt werden).

Alle oben genannten Szenarien führen zu der gleichen Fehlermeldung (in der Prämisse angegeben). Ich habe auch die folgende Frage auf Stackoverflow:

Dies führte zu mir OnlyDetect="no" zum <UpgradeVersion> Elemente eines neuen <Upgrade> Elements in meinem Produkt .wxs Datei hinzufügen:

<Upgrade Id="UpgradeCode C"> 
    <UpgradeVersion Property="OLD_PRODUCT_FOUND" 
        IncludeMaximum="yes" 
        Maximum="10.2.0.0" 
        MigrateFeatures="yes" 
        OnlyDetect="no" /> 
</Upgrade> 

Allerdings hatte dies genau das gleiche Ergebnis wie zuvor.


Beispielcode

ich ein kleines Projekt erstellt haben, die ich mein Szenario zu replizieren.

Unten ist die .wxs Datei für die Version 10.2.0.0 des Produkts aus meinem Testprojekt:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Patch 
     AllowRemoval="no" 
     Manufacturer="Sample Corp" 
     MoreInfoURL="http://www.dynamocorp.com/" 
     DisplayName="Sample Patch" 
     Description="Small Update Patch" 
     Classification="Update" 
     OptimizedInstallMode="yes"> 

     <Media Id="8000" Cabinet="RTM.cab" CompressionLevel="none"> 
      <PatchBaseline Id="RTM">    
      </PatchBaseline> 
     </Media> 

     <PatchFamilyRef Id="SamplePatchFamily"/>  
    </Patch> 

    <Fragment>  
     <PatchFamily Id='SamplePatchFamily' Version='10.2.0.0' Supersede='no'> 
     </PatchFamily> 
    </Fragment> 
</Wix> 
:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="{8CB0CC73-82B1-495E-B768-D1C38372678A}" 
     Name="Sample Application" 
     Language="1033" 
     Version="10.2.0.0" 
     Manufacturer="Sample Corporation" 
     UpgradeCode="{7E72848F-FC99-4737-87DE-91C738B7C5EE}"> 

     <Package Description="Installs a file that will be patched." 
      Comments="This Product does not install any executables" 
      InstallerVersion="200" 
      Compressed="yes" /> 

     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 
     <FeatureRef Id="SampleProductFeature"/> 
    </Product> 

    <Fragment> 
     <Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1"> 
      <ComponentRef Id="Sample.txt" /> 
     </Feature> 
    </Fragment> 

    <Fragment> 
     <DirectoryRef Id="SampleProductFolder"> 
      <Component Id="Sample.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1"> 
       <File Id="Sample.txt" Name="Sample.txt" Source=".\$(var.Version)\Sample.txt" />    
      </Component>  
     </DirectoryRef> 
    </Fragment> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PFiles"> 
       <Directory Id="SampleProductFolder" Name="Patch Sample Directory"> 
       </Directory> 
      </Directory> 
     </Directory> 
    </Fragment> 
</Wix> 

Unterhalb der .wxs Datei für den Patch auf Version 10.2.0.0 ist

Antwort

0

Die Lösung, so stellt sich heraus, ist so einfach wie die Deaktivierung der Validierung des UpgradeCodes für den neuesten Patch. Dies kann durch Setzen des UpgradeCode Attributs auf Validate auf "no" erfolgen.

<Media Id="8000" Cabinet="RTM.cab" CompressionLevel="none"> 
    <PatchBaseline Id="RTM"> 
     <Validate UpgradeCode="no" /> 
    </PatchBaseline> 
</Media> 

Dieser 10.2.0.0 Patch, der eine neue Upgrade einführt, läuft erfolgreich auf der 10.1.0.21682, und ich konnte erfolgreich drei nachfolgenden Patches auszuführen. (Bei diesen Patches ist die UpgradeCode-Überprüfung aktiviert und derselbe UpgradeCode wie bei 10.2.0.0.)

1

Sie sollten den ProductCode auf keinen Fall ändern. Wenn Sie MSI-Dateien erstellt haben, die den Upgrade-Code geändert haben, ändern sich möglicherweise kritische Elemente. Sie haben einen Patch erstellt, der auf ein Produkt mit einem bestimmten ProductCode und PackageCode abzielt (basierend auf den von Ihnen erstellten MSI-Dateien) und genau das, was Sie möchten.

Am wichtigsten, ich würde überprüfen, dass Patch 7 mit UpgradeCode C nicht den ProductCode oder PackageCode des installierten Produkts geändert, weil das ist der Patch, der das Problem verursacht, und wenn Ihr neues Patch 8 kein Produkt zum Patchen finden, ist es der ProductCode und PackageCode wird es suchen. Das ist der Fehler - der ProductCode (oder PackageCode), auf den dieser Patch abzielt, ist nicht installiert. Mit anderen Worten, ich bezweifle sehr, dass der UpgradeCode in dieser Fehlermeldung eine Rolle spielt, und dass der verlinkte Artikel über das Upgrade von mehr als einem Produkt mit einem größeren Upgrade keine Auswirkungen auf ein Patching-Problem hat, es sei denn, Sie machen sich Sorgen über größere Upgrades Sie listen nur alle UpgradeCodes auf, die aktualisiert werden müssen, und das ist kein Problem.

+0

In meinem Testprojekt ändert sich nur der UpgradeCode und die Version zwischen den Patches. Dies gilt auch für den Patch 7, der das Problem einführte. – Stephan