2015-09-30 6 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

まず、レジストリキーは、下記の2つのいずれかの場所になります - そしてそれはおそらくです最初のものは64ビットOSにインストールされた32ビットアプリケーションのためのものです。

  • 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、あなたは地獄の中にいる。 :)できる限り私はあなたを助けます。

どのようにそのパッケージをインストールしましたか?あなたが興味深い見つけることができます

のDLL:

  • BootstrapperCore.dll(WiXのSDKに付属)
  • Microsoft.Deployment.WindowsInstaller.dll(WiXのSDKに付属)
  • WindowsBase.dll (スレッディング用)

そして、XMLファイルの1つは、このようなものでなければならないので、正確に何が上にあるか見ることができます。

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

注:レジストリの検索や条件NETFXを検出するためのWiXツールセットで使用されているもの から少し異なっています。 NETFXため 検出され、次のWiXツールセットを使用しています:

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

Microsoftダウンロード:

は、あなたのチェーンでPackageGroupRef要素を含める:

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

次のソリューションは、このことができます.NET Framework 4.5.2(オフラインインストーラ)を開き、ブートストラッププロジェクトに追加します。 (私は「リソース」という名前のフォルダに入れて)

を以下のフラグメント追加します。

<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

への答えではありません。これは役に立ちませんでした。 –

関連する問題