2015-09-30 14 views
9

Tôi đang trong quá trình tìm hiểu cách phát triển bootstrapper được quản lý tùy chỉnh để ghi đè. Theo tôi, không có hướng dẫn chính thức, các hướng dẫn không chính thức luôn được lấp đầy với những thứ WPF mà tôi không quan tâm và hầu hết mọi người trên diễn đàn không làm nhiều hơn là nói rằng bạn phải tạo một lớp kế thừa từ BootstrapperApplication và ghi đè lên Phương thức Run().làm thế nào để tự dọn dẹp gói wix-burn không đúng định dạng?

Tôi đã làm điều đó, tạo tệp cấu hình, thêm trọng tải vào đánh dấu xml. Trình cài đặt kết quả không làm gì, thực sự nó chạy mãi mãi, chỉ giết nó thôi. Tôi chân thành mong đợi rằng gọi base.Run() sẽ cho tôi một số hành vi mặc định GUI-ít cơ bản. Nhưng đó chỉ là một phương pháp trừu tượng. Cuối cùng tôi đã học được rằng tôi phải gọi một số Engine.functions() để thực sự làm một số công việc. Vì vậy, tôi đã viết bài này để kiểm tra:

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

Tôi đã biên dịch thành công gói đã cài đặt, sự cố là không thể gỡ cài đặt. Câu hỏi của tôi là, tôi có thể làm gì để thanh tẩy nó khỏi hệ thống của tôi? Tôi phải xóa những khóa registry nào, tôi phải xóa những gói đã lưu trong bộ nhớ cache nào và tôi phải làm gì khác để loại bỏ nó?

Trả lời

1

Thứ nhất, khóa registry sẽ được ở một trong hai địa điểm được liệt kê dưới đây - và nó có thể là đầu tiên kể từ thứ hai là cho các ứng dụng 32-bit được cài đặt trên một hệ điều hành 64-bit.

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

Thứ hai, bạn có thể sử dụng các khóa registry để xác định nơi thực thi được lưu lại để gỡ bỏ cài đặt, mà có lẽ trong một thư mục giống như C:\ProgramData\Package Cache.

Nếu đây là bản cài đặt .msi, có một khóa đăng ký khác và tệp được lưu vào bộ nhớ cache ở một vị trí khác như được đề cập here.

liên kết khác:

0

Ufff, bạn đã rơi vào địa ngục. :) Tôi sẽ giúp bạn nhiều nhất có thể.

Bạn đã cài đặt gói đó bằng cách nào?

dlls mà bạn có thể tìm thấy thú vị:

  • BootstrapperCore.dll (kèm với WiX SDK)
  • Microsoft.Deployment.WindowsInstaller.dll (kèm với WiX SDK)
  • WindowsBase.dll (đối với luồng)

Và, một trong các tệp XML phải như thế này, vì vậy bạn có thể thấy chính xác những gì ở trên đó.

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

Lưu ý: tìm kiếm registry và điều kiện của bạn là một chút khác nhau từ gì được sử dụng trong các công cụ WiX để phát hiện NETFX. Sau đây là phát hiện cho NETFX bộ công cụ WiX sử dụng:

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

giải pháp Tiếp theo có thể là thế này:

Bao gồm một yếu tố PackageGroupRef trong chuỗi của bạn:

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

Tải về Microsoft .NET Framework 4.5.2 (Trình cài đặt ngoại tuyến) và thêm nó vào Dự án Bootstrapper của bạn. (Tôi đặt nó trong một thư mục có tên "Resource".)

Thêm Fragment sau:

<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

Tôi đánh giá cao sự giúp đỡ của bạn, nhưng nó thực sự không phải là một câu trả lời cho câu hỏi của tôi – Alex

+0

Tôi có vấn đề tương tự vì vậy tôi đã cố gắng để đại diện cho giải pháp của tôi . sry rằng điều này không hữu ích. –

Các vấn đề liên quan