2015-09-30 35 views
9

Wix-yanması için özel bir yönetilen önyükleyicinin nasıl geliştirileceğini öğrenme sürecindeyim. Bildiğim kadarıyla resmi dersler yok, gayri resmi dersler her zaman ilgimi çekmediğim WPF şeyler ile doludur ve forumlardaki çoğu kişi BootstrapperApplication'dan miras alan bir sınıf oluşturmanız gerektiğini söylemekten daha fazlasını yapmaz. Run() yöntemi.Hatalı bir wix-yanma paketini manuel olarak nasıl temizlerim?

Bunu yaptım, config dosyasını yarattım, yükleri xml biçimlendirmesine ekledim. Ortaya çıkan yükleyici hiçbir şey yapmadı, aslında sonsuza kadar koştu, sadece onu öldürdü. Ben içtenlikle base.Run() çağrı bazı temel varsayılan GUI-less davranışını vereceğini umuyorum. Ama bu sadece soyut bir yöntem. Sonunda, biraz iş yapmak için bazı Engine.functions() 'ı çağırmam gerektiğini öğrendim. Bu yüzden teste bu yazmış:

başarıyla aslında yüklü bir paket derlenmiş
protected override void Run() 
{ 
    Engine.Detect(); 
    Engine.Plan(LaunchAction.Install); 
    Engine.Apply(IntPtr.Zero); 
    Engine.Quit(0); 
} 

, sorunu kaldırılamaz olmasıdır. Sorum şu, onu sistemimden temizlemek için ne yapabilirim? Hangi kayıt defteri anahtarlarını silmeli, önbelleğe alınmış paketler silmeli ve bundan kurtulmak için başka ne yapmalıyım?

cevap

1

Birincisi, kayıt defteri anahtarı aşağıda listelenen iki konumlardan birinde olacaktır - ve bu durum büyük ihtimalle ikincisi birincisi, 64 bit işletim sistemine yüklenmiş 32 bit uygulamalar içindir.

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

    0

    Ufff, kendini cehenneme soktun. :) Elimden geldiğince yardımcı olacağım.

    Bu paketi nasıl yüklediniz? ilginç bulabilirsiniz

    dll'ler:

    • BootstrapperCore.dll (WiX SDK ile birlikte)
    • Microsoft.Deployment.WindowsInstaller.dll (WiX SDK ile birlikte)
    • WindowsBase.dll (threading için)

    Ve XML dosyalarından biri böyle olmalı, böylece tam olarak orada ne olduğunu görebilirsiniz.

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

    Not: Kayıt defteri arama ve koşullar NETFX algılamak için WiX araçlarla gelen kullanılır ne biraz farklıdır. NETFX için algılama aşağıdaki WiX araç grubu kullanır:

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

    indirin Microsoft:

    sizin Zincirinde bir PackageGroupRef öğesini içer:

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

    Sonraki çözüm bu olabilir .NET Framework 4.5.2 (Çevrimdışı Yükleyici) ve bunu Bootstrapper Projenize ekleyin. (I "Kaynak" adlı bir klasöre koyun.)

    aşağıdaki Parçası ekleyin:

    <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

    yardımın için minnettarım, ama aslında benim soruya – Alex

    +0

    bir cevap değil ben benzer bir konu bu yüzden benim çözüm temsil etmeye çalıştı . Bu yardımcı olmadı sry. –

    İlgili konular