2015-09-30 2 views
9

Je suis en train d'apprendre à développer un bootstrappeur géré sur mesure pour wix-burn. Jusqu'à mon avis il n'y a pas de tutoriels officiels, les tutoriels non officiels sont toujours remplis de trucs WPF qui ne m'intéressent pas et la plupart des gens sur les forums ne font que dire que vous devez créer une classe qui hérite de BootstrapperApplication et remplace le Run() méthode. J'ai fait cela, créé le fichier de configuration, ajouté les charges utiles au balisage XML. L'installateur qui en résulte n'a rien fait, en fait il a fonctionné pour toujours, seul le tuer l'a arrêté. Je m'attendais sincèrement à ce que l'appel de base.Run() me donne un comportement basique sans interface graphique. Mais ce n'est qu'une méthode abstraite. Finalement, j'ai appris que je devais appeler Engine.functions() pour faire un peu de travail. J'ai donc écrit ce à tester:comment purger manuellement un paquet wix-burn mal formé?

protected override void Run() 
{ 
    Engine.Detect(); 
    Engine.Plan(LaunchAction.Install); 
    Engine.Apply(IntPtr.Zero); 
    Engine.Quit(0); 
} 

J'ai compilé avec succès un paquet qui fait installé, le problème est qu'il ne peut pas être désinstallée. Ma question est, que puis-je faire pour le purger de mon système? Quelles clés de registre dois-je effacer, quels paquets cachés dois-je supprimer, et que dois-je faire d'autre pour m'en débarrasser?

Répondre

1

Tout d'abord, la clé de Registre sera dans l'un des deux endroits indiqués ci-dessous - et il est probablement le le premier depuis le second concerne les applications 32 bits installées sur un système d'exploitation 64 bits.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninst‌​all

Deuxièmement, vous pouvez utiliser la clé de Registre pour déterminer où l'exécutable est mis en cache pour désinstaller, ce qui est probablement dans un dossier qui ressemble à C:\ProgramData\Package Cache.

S'il s'agissait d'une installation .msi, il existe une autre clé de registre et le fichier est mis en cache dans un emplacement différent, tel que mentionné here.

Autres liens:

0

Ufff, vous êtes dans un enfer. :) Je vais vous aider autant que possible.

Comment avez-vous installé ce paquet?

dll que vous pouvez trouver intéressant:

  • BootstrapperCore.dll (inclus avec le SDK WiX)
  • Microsoft.Deployment.WindowsInstaller.dll (inclus avec le SDK WiX)
  • WindowsBase.dll (pour l'enfilage)

Et, l'un des fichiers XML devrait être comme ça, de sorte que vous pouvez voir ce qui est exactement là-haut.

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 
    <Bundle Name="My Test Application" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="PUT-GUID-HERE"> 
    <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> 
     <Payload SourceFile="..\TestBA\BootstrapperCore.config"/> 
     <Payload SourceFile="..\TestBA\bin\Release\TestBA.dll"/> 
     <Payload SourceFile="..\TestBA\bin\Release\GalaSoft.MvvmLight.WPF4.dll"/> 
     <Payload SourceFile="C:\Program Files\WiX Toolset v3.6\SDK\Microsoft.Deployment.WindowsInstaller.dll"/> 
    </BootstrapperApplicationRef> 
    <Chain> 
     <PackageGroupRef Id='Netfx4Full' /> 
     <MsiPackage SourceFile="..\DummyInstaller\bin\Release\DummyInstaller.msi" Id="DummyInstallationPackageId" Cache="yes" Visible="no"/> 
    </Chain> 
    </Bundle> 
    <Fragment> 
    <!-- Managed bootstrapper requires .NET as a dependency, since it was written in .NET. 
     WiX provides a Bootstrapper for the bootstrapper. The fragment below includes .NET. 
     For more information or examples see Heath Stewart's blog or the WiX source: 
     http://blogs.msdn.com/b/heaths/archive/2011/10/28/introducing-managed-bootstrapper-applications.aspx 
     --> 
    <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx4Full" /> 
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" /> 
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" /> 
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" /> 
    <PackageGroup Id="Netfx4Full"> 
     <ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" 
        SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe" 
        DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" 
        DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" /> 
    </PackageGroup> 
    </Fragment> 
</Wix> 

Note: votre recherche de registre et les conditions sont un peu différent de ce qui est utilisé dans le jeu d'outils WiX pour détecter netfx. Ce qui suit est la détection pour netfx l'ensemble d'outils WiX utilise:

<util:RegistrySearch 
    Id="NETFRAMEWORK40" 
    Variable="NETFRAMEWORK40" 
    Root="HKLM" 
    Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" 
    Value="Install" 
    Result="value" /> 

solution suivante peut être ceci:

Inclure un élément PackageGroupRef dans votre chaîne:

<Bundle> 
    <Chain> 
     <PackageGroupRef Id="NetFx452" />   
     <MsiPackage ... /> 
    </Chain> 
</Bundle> 

Télécharger Microsoft .NET Framework 4.5.2 (programme d'installation hors connexion) et ajoutez-le à votre projet Bootstrapper. (Je l'ai mis dans un dossier appelé « ressources ».)

Ajouter le fragment suivant:

<Fragment> 
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/> 
    <PackageGroup Id="NetFx452"> 
     <ExePackage Id="NetFx452" 
        Cache="no" 
        Compressed="yes" 
        PerMachine="yes" 
        Permanent="yes" 
        Vital="yes" 
        Name="NDP452-KB2901907-x86-x64-AllOS-ENU.exe" 
        SourceFile="Resource\NDP452-KB2901907-x86-x64-AllOS-ENU.exe" 
        DetectCondition="NETFRAMEWORK45" 
        InstallCommand="/q /norestart" />  
    </PackageGroup> 
</Fragment> 
+0

Je vous remercie de votre aide, mais il est en fait pas une réponse à ma question – Alex

+0

j'avais problème similaire si j'ai essayé de représenter ma solution . sry que cela n'a pas été utile. –