2015-09-30 2 views
9

Я изучаю, как разработать настраиваемый управляемый загрузчик для wix-burn. До моих знаний нет официальных учебных пособий, неофициальные учебные пособия всегда заполнены материалом WPF, который мне неинтересен, и большинство людей на форумах не делают больше, чем говорят, что вы должны создать класс, который наследуется от BootstrapperApplication, и переопределяет Run().Как вручную очистить поврежденный пакет wix-burn?

Я сделал это, создал файл конфигурации, добавил полезную нагрузку в разметку xml. Результирующий установщик ничего не сделал, на самом деле он бежал вечно, только убив его, он остановил его. Я искренне ожидал, что вызов base.Run() даст мне некоторое базовое поведение по умолчанию без GUI. Но это только абстрактный метод. В конце концов я узнал, что должен называть некоторые Engine.functions(), чтобы на самом деле выполнить некоторую работу. Так что я написал это испытание:

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

Я успешно скомпилирован пакет, который фактически установлен, проблема заключается в том, что она не может быть удалена. Мой вопрос: что я могу сделать, чтобы очистить его от моей системы? Какие ключи реестра необходимо удалить, какие кешированные пакеты необходимо удалить, и что еще нужно сделать, чтобы избавиться от него?

ответ

1

Во-первых, ключ реестра будет находиться в одном из двух мест, перечисленных ниже, - и это, вероятно, первый, поскольку второй для 32-разрядных приложений, установленных в 64-разрядной ОС.

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

Во-вторых, вы можете использовать ключ реестра, чтобы определить, где исполняемый файл кэшируется для удаления, который, вероятно, в папке, которая выглядит как C:\ProgramData\Package Cache.

Если это была установка .msi, есть еще один раздел реестра, и файл кэшируется в другом месте, как указано here.

Другие ссылки:

0

Ufff, вы попали в ад. :) Я помогу тебе как можно больше.

Как вы установили этот пакет?

DLLs, которые вы можете найти интересное:

  • BootstrapperCore.dll (в комплекте с WiX SDK)
  • Microsoft.Deployment.WindowsInstaller.dll (в комплекте с WiX SDK)
  • WindowsBase.dll (для резьбы)

И один из файлов XML должен быть таким, чтобы вы могли видеть, что именно там.

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

Примечание: Ваш поиск реестра и условие немного отличается от , что используется в наборе инструментов WiX для обнаружения NETFX. Ниже приводится обнаружения NETFX набор инструментов WiX использует:

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

Следующее решение может быть таким:

Включить элемент PackageGroupRef в вашей цепи:

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

Загрузить Microsoft .NET Framework 4.5.2 (автономный установщик) и добавьте его в проект Bootstrapper. (Я положил его в папку под названием «Ресурс».)

Добавьте следующий фрагмент:

<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

Я ценю вашу помощь, но это на самом деле не ответ на мой вопрос – Alex

+0

я был похож вопрос, поэтому я попытался представить свое решение , что это не помогло. –

Смежные вопросы