2015-09-30 18 views
9

Jestem w trakcie uczenia się, jak opracować niestandardowy zarządzany bootstraper do nagrywania wix. Do mojej wiedzy nie ma oficjalnych samouczków, nieoficjalne tutoriale są zawsze wypełnione materiałami WPF, którymi nie jestem zainteresowany, a większość ludzi na forach nie robi nic więcej niż mówiąc, że musisz stworzyć klasę, która dziedziczy po BootstrapperApplication i nadpisuje Metoda Run().jak ręcznie usunąć zniekształcony pakiet wix-burn?

Zrobiłem to, utworzyłem plik konfiguracyjny, dodałem ładunki do znaczników XML. Wynikowy instalator nie zrobił nic, właściwie to działał wiecznie, tylko zabicie go zatrzymało to. Szczerze oczekiwałem, że wywołanie base.Run() da mi pewne podstawowe domyślne zachowanie bez GUI. Ale to tylko abstrakcyjna metoda. W końcu dowiedziałem się, że muszę wywołać niektóre funkcje Engine.functions(), aby rzeczywiście wykonać jakąś pracę. Więc napisałem to, aby przetestować:

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

Pomyślałem, że udało mi się skompilować pakiet, który faktycznie został zainstalowany. Problem polega na tym, że nie można go odinstalować. Moje pytanie brzmi, co mogę zrobić, aby usunąć to z mojego systemu? Jakie klucze rejestru muszę usunąć, jakie zbuforowane pakiety muszę usunąć i co jeszcze muszę zrobić, aby się go pozbyć?

Odpowiedz

1

pierwsze, klucz rejestru zostanie w jednym z dwóch lokalizacjach wymienionych poniżej - i to chyba pierwszy, ponieważ drugi jest dla aplikacji 32-bitowych zainstalowanych w 64-bitowym systemie operacyjnym.

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

Po drugie, można użyć klucza rejestru, aby określić, gdzie plik wykonywalny jest buforowane do dezinstalacji, który jest prawdopodobnie w folderze, który wygląda jak C:\ProgramData\Package Cache.

Jeśli była to instalacja .msi, istnieje inny klucz rejestru, a plik jest zapisywany w pamięci podręcznej w innej lokalizacji, jak wspomniano pod numerem here.

Inne linki:

0

Ufff, wpakowałeś się w piekło. :) Pomogę ci jak tylko mogę.

Jak zainstalowałeś tę paczkę?

DLL, które można znaleźć interesujące:

  • BootstrapperCore.dll (dołączony do WiX SDK)
  • Microsoft.Deployment.WindowsInstaller.dll (dołączony do WiX SDK)
  • WindowsBase.dll (dla wątków)

I jeden z plików XML powinien być taki, aby można było zobaczyć, co dokładnie tam jest.

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

Uwaga: wyszukiwanie rejestru i warunki są nieco odmienne od co jest wykorzystywane w celu wykrycia zestawu narzędzi WiX NETFX. Poniżej znajduje się wykrywania NETFX zestaw narzędzi WiX używa:

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

Następny rozwiązanie może być w ten sposób:

zawierać element PackageGroupRef w swoim Łańcuch:

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

Pobierz Microsoft .NET Framework 4.5.2 (Offline Installer) i dodaj go do swojego projektu Bootstrapper. (I umieścić go w folderze o nazwie „zasób”).

Dodaj następujący fragment:

<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

I wdzięczni za pomoc, ale w rzeczywistości nie jest odpowiedź na moje pytanie – Alex

+0

miałem podobny problem, więc starałem się reprezentować moje rozwiązania . sry, że to nie było pomocne. –

Powiązane problemy