2013-05-06 6 views
9

Ich versuche zu verhindern, dass meine Dienste ihre Einstellungen (Anmeldeinformationen und andere Optionen) bei größeren Upgrades in meinem WiX-Installationsprogramm verlieren. Ich folgte dem Rat here, und ich versuche,Verhindern, dass Dienste Einstellungen bei größeren Upgrades in WiX verlieren

<InstallExecuteSequence> 
    <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
</InstallExecuteSequence> 

Aber meine Dienste werden auf Upgrades neu installiert noch zu verwenden, auf jedem Upgrade meine Anmeldeinformationen und andere Service-Einstellungen zu verlieren.

Im Protokoll sieht es so aus, als ob meine Bedingung nur einmal geehrt wird. Ich sehe

MSI (s) (6C:E8) [16:52:53:944]: Skipping action: DeleteServices (condition is false) 

und dann ein paar hundert Zeilen später, ich sehe

MSI (s) (6C:A4) [16:52:54:873]: Doing action: DeleteServices 

So scheint es mir, dass die zweite DeleteServices ist mein Problem. Kann mir jemand sagen, wie ich das zweite unterdrücken kann oder was ich dafür mache?

Ich benutze das WiX-Toolset 3.7. Hier ist mein Code, Guids offensichtlich entfernt.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id='*' Name='My Product' Language='1033' 
      Version='1.0.6' Manufacturer='Me' UpgradeCode='PUT-GUID-HERE' > 
    <Package Description='My Product' Platform='x86' Id='*' 
      Manufacturer='Me' InstallerVersion='200' Compressed='yes' /> 

    <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/> 
    <InstallExecuteSequence> 
     <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
    </InstallExecuteSequence> 

    <Media Id='1' Cabinet='product.cab' EmbedCab='yes' /> 

    <Directory Id='TARGETDIR' Name='SourceDir'> 
     <Directory Id='ProgramFilesFolder' Name='PFiles'> 
     <Directory Id='AgentDir' Name='Agent'> 
      <Component Id='Binaries' Guid='PUT-GUID-HERE' Win64='no'> 
      <File Id='AgentExe' Source='../MyProduct/MyExe.exe' KeyPath='yes' ProcessorArchitecture='x86' /> 
      <ServiceInstall Id="TheServiceInstall" Description="[ProductName]" EraseDescription="no" DisplayName="[ProductName]" ErrorControl="normal" Interactive="no" Name="[ProductName]" Start="auto" Type="ownProcess" Vital="yes"> 
      </ServiceInstall> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 

    <Feature Id='CompleteInstall' Title='My Product' Level='1'> 
     <ComponentRef Id='Binaries' /> 
    </Feature> 
    </Product> 
</Wix> 

Vielen Dank!

Antwort

8

Es scheint, dass mein Problem nicht war, dass die Dienste gelöscht wurden, es war die Installation des neuen Produkts, die dazu führte, dass ich meine Diensteinstellungen verlor.

Ich habe diese in mein InstallExecuteSequence Block, und es scheint, die Sie

<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices> 

Trick getan haben Danke für die Hilfe Stephen!

1

Bei einem größeren Upgrade sollten Sie zwei Ausführungssequenzen ausführen, eine für die Deinstallation des alten Produkts und eine für die Installation des neuen Produkts. Ich vermute, dass dein Problem von der Deinstallation des älteren Produkts herrührt. Verfügt das ältere Produkt über die Bedingung "... AND nicht UPGRADINGPRODUCTCODE", um die DeleteServices-Aktion zu unterdrücken, wenn das alte Produkt deinstalliert wird? Sie müssen eine Möglichkeit finden, das alte Produkt zu patchen, um diese Bedingung einzufügen, bevor Sie das Upgrade durchführen.

+0

Danke, ich habe es nicht als zwei getrennte Prozesse gedacht. Das ältere Produkt hat die DeleteServices-Bedingung "NOT UPGRADINGPRODUCTCODE". Ich habe es nirgends eingesetzt, ich teste es immer noch. Also mein altes Produkt ist identisch mit meinem neuen Produkt, außer dass ich den Build der Produktversion inkrementiere. Auch die "Überspringende Aktion: DeleteServices" kommt zuerst im Protokoll, die "Doing Aktion: DeleteServices" kommt an zweiter Stelle. Ich nehme also an, dass die Deinstallation des alten Produkts genau das tut, was ich möchte, und dass die Installation des neuen Produkts die Dienste löscht. – Brian

Verwandte Themen