2015-09-30 33 views
9

Sono in procinto di imparare come sviluppare un bootstrapper gestito personalizzato per wix-burn. Fino alla mia conoscenza non ci sono tutorial ufficiali, i tutorial non ufficiali sono sempre pieni di materiale WPF a cui non sono interessato e la maggior parte delle persone nei forum non fa molto di più che dire che è necessario creare una classe che eredita da BootstrapperApplication e sovrascrive il Metodo Run().come eliminare manualmente un pacchetto wix-burn malformato?

Ho fatto, ho creato il file di configurazione, aggiunto i payload al markup xml. L'installatore risultante non ha fatto nulla, in realtà ha funzionato per sempre, solo ucciderlo lo ha fermato. Mi aspettavo sinceramente che chiamare base.Run() mi avrebbe dato un comportamento di base senza GUI di default. Ma questo è solo un metodo astratto. Alla fine ho imparato che devo chiamare alcuni Engine.functions() per fare effettivamente un po 'di lavoro. Così ho scritto questo a prova:

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

ho compilato con successo un pacchetto che effettivamente installato, il problema è che non può essere disinstallato. La mia domanda è, cosa posso fare per eliminarlo dal mio sistema? Quali chiavi di registro devo cancellare, quali pacchetti cache devo eliminare e cos'altro devo fare per sbarazzarmene?

risposta

1

In primo luogo, la chiave di registro sarà in una delle due sedi elencate qui sotto - ed è probabilmente la il primo dal secondo è per le applicazioni a 32 bit installate su un sistema operativo a 64 bit.

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

In secondo luogo, è possibile utilizzare la chiave di registro per determinare dove l'eseguibile viene memorizzato nella cache per la disinstallazione, che è probabilmente in una cartella che assomiglia C:\ProgramData\Package Cache.

Se si tratta di un'installazione .msi, è disponibile un'altra chiave di registro e il file viene memorizzato nella cache in una posizione diversa, come indicato in here.

Altri link:

0

Ufff, sei finito in un inferno. :) Ti aiuterò il più possibile.

Come è stato installato il pacchetto?

DLL che si possono trovare interessanti:

  • BootstrapperCore.dll (inclusi con il WiX SDK)
  • Microsoft.Deployment.WindowsInstaller.dll (inclusi con il WiX SDK)
  • WindowsBase.dll (per la filettatura)

E, uno dei file XML dovrebbe essere così, in modo da poter vedere esattamente cosa c'è lassù.

<?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> 

Nota: la ricerca e le condizioni di registro sono un po 'diverso da quello che viene utilizzato nel set di strumenti WiX per rilevare netfx. Quello che segue è il rilevamento per netfx l'insieme di strumenti WiX usa:

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

soluzione successiva può essere questo:

includere un elemento PackageGroupRef nella vostra catena:

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

Download di Microsoft .NET Framework 4.5.2 (Programma di installazione offline) e aggiungerlo al progetto Bootstrapper. (L'ho messo in una cartella denominata "risorsa".)

Aggiungere il seguente frammento:

<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

Apprezzo il vostro aiuto, ma non è in realtà una risposta alla mia domanda – Alex

+0

ho avuto problema simile in modo ho cercato di rappresentare la mia soluzione . sy che questo non è stato utile. –