2017-09-08 4 views
0

j'ai écrit Wix programme d'installation, qui enveloppe PyTangoArchiving-7.3.2.win-amd64.exe fichier dans package dans PyTangoArchivingInstaller.msi. Le processus d'installation est correct je pense, dans le panneau de contrôle -> Programmes je peux voir deux programmes supplémentaires installés: PyTangoArchiving-7.3.2.win-amd64.exe - le programme que je voulais installer et mon emballage - PyTangoArchivingInstaller.WIX Toolset - désinstallant fichier .exe

Mais quand j'essaye de désinstaller l'application, seulement le wrapper est désinstallé et le programme entier (PyTangoArchiving-7.3.2.win-amd64.exe) est toujours là, je dois le désinstaller manuellement du Panneau de configuration. Est-ce que sb peut m'aider avec ça?

Voici mon code:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="PyTangoArchivingInstaller" Language="1033" Version="1.0.0.0" Manufacturer="test" UpgradeCode="PUT-GUID-HERE"> 
     <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\License.rtf"/> 
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION"/> 


    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate EmbedCab="yes"/> 
    <UIRef Id="WixUI_InstallDir"/> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id='TempFolder'>  
      <Directory Id="INSTALLLOCATION" Name="MyApp" > 
      <Component Id='MyComponent' Guid='*'> 
      <File Id="mysetup_exe" Source="PyTangoArchiving-7.3.2.win-amd64.exe" /> 
     </Component>   
     </Directory> 
     </Directory> 
    </Directory> 
    <Feature Id="MainApplication" Title="Main Application" Level="1"> 
     <ComponentRef Id="MyComponent" /> 
    </Feature> 
    <CustomAction Id="run_setup" FileKey="mysetup_exe" ExeCommand="/SP- /SILENT /SUPPRESSMSGBOXES /LANG=English 
        /NOCANCEL /DIR=&quot;[INSTALLLOCATION]&quot;" 
        Execute="deferred" Impersonate="no" 
        Return="check" /> 

    <InstallExecuteSequence> 
     <Custom Action="run_setup" Sequence='5401'>NOT Installed</Custom> 
    </InstallExecuteSequence> 
    </Product> 
</Wix> 
+0

Vous pouvez jeter un coup d'œil ici: [Pourquoi est-ce une bonne idée de limiter l'utilisation des actions personnalisées dans mes configurations WiX/MSI?] (Https://stackoverflow.com/questions/46179778/why-is -it-a-good-idea-to-limit-the-use-of-custom-actions-in-my-wix-msi-setups/46179779 # 46179779). –

Répondre

1

De manière générale, vous ne devriez pas habituellement tourner un autre exe à l'intérieur de votre MSI, surtout si elle est une installation qui apparaît dans Ajout/Suppression de programmes. Vous devriez plutôt utiliser un bootstrapper pour enchaîner plusieurs installations et c'est la façon préférée de faire ce que vous essayez de faire.


Puisque vous exécutez votre setup_exe d'une action personnalisée, vous avez aussi besoin d'une action personnalisée correspondant pour le désinstaller.

Il s'agirait essentiellement du même format que celui que vous utilisez pour installer, à l'exception des arguments de ligne de commande de désinstallation, quels qu'ils soient.

Vous devrez planifier votre action personnalisée de désinstallation avant l'action standard "RemoveFiles" afin que l'installation exe existe toujours lorsque vous essayez d'exécuter l'action personnalisée. Vous devez également conditionner cette action personnalisée avec REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE.

Cette approche rencontrera des problèmes si vous essayez de prendre en charge les mises à niveau avec/sans mises à niveau de l'installation exe packagée. Il est fortement recommandé d'utiliser le programme d'amorçage wix burn (peu d'apprentissage) ou l'un des autres programmes d'amorçage disponibles pour les installations multiples. Ceux-ci prendraient en charge de manière plus robuste et correcte deux installations ainsi que des mises à niveau et des désinstallations.

+0

Ok, merci pour votre aide :) –