4

2 つの msi (msi1 , msi2) をカプセル化する書き込みバンドルを作成しました。UI では、チェックボックスを使用して、インストールする MSI を選択するようユーザーに求めます。

ユーザーがインストールする msi の 1 つを選択すると、インストールは正常に行われます。ただし、アンインストール操作中に、書き込みログ ファイルには次のように表示されます。

[][:15]: Detected package: Netfx4Full, state: Present, cached: None

[][:15]: Detected package: DummyInstallationPackageId3, state: **Absent**, cached: None

[][:15]: Detected package: msi2.msi, state: **Present**, cached: Complete

[][:15]: Detect complete, result: 0x0
[][:16]: Plan 3 packages, action: Uninstall
[][:16]: Will not uninstall package: msi2.msi,   found dependents: 1
[][:16]: Found dependent: {08e74372-83f2-4594-833b-e924b418b360}, name: My Test Application

インストール シナリオでは、msi1 ではなく msi2 をインストールすることにしました。

私のバンドルコードは次のようになります:

<Bundle Name="My Test Application" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="CC2A383C-751A-43B8-90BF-A250F7BC2863">

<Chain>

<PackageGroupRef Id='Netfx4Full' />

<MsiPackage  Id="DummyInstallationPackageId3"
SourceFile="msi1.msi"
ForcePerMachine="yes"
InstallCondition="var1 = 1"
>
</MsiPackage>

<MsiPackage 
SourceFile="msi2.msi"
Vital="yes" Cache="yes"  Visible="no"
ForcePerMachine="yes"
InstallCondition="var2 = 2"
>
</MsiPackage>
</Chain>

私の OnDetectPackageComplete() は次のようになります。

 private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e)
  {
    if (e.PackageId == "DummyInstallationPackageId3" )
    {
      if (e.State == PackageState.Absent)
        InstallEnabled = true;

      else if (e.State == PackageState.Present)
        UninstallEnabled = true;
    }
  }

インストール時にユーザーが選択した msi を書き込みバンドルが自由にアンインストールできるようにするにはどうすればよいですか。さらに、両方の msi を選択してインストールすると、アンインストールは正常に機能します。

IMO、バンドルと 2 msi の関係に問題があります。この問題で立ち往生しているので、助けてください。

4

1 に答える 1

5

最初の Burn ブートストラップを作成する際に試行錯誤を繰り返した結果、レジストリが台無しになる可能性があります。次のことを試すことをお勧めします。

  1. レジストリで「依存関係」 (例: {08e74372-83f2-4594-833b-e924b418b360} ) を検索し、それらのキーを削除します。
  2. アプリケーションをアンインストールします (成功するはずです)
  3. 以前にインストールした他の .msi の製品コードをレジストリで検索します。レジストリにないことを確認します。存在する場合は、それらのキーを削除します。
  4. 再インストールしてみて、問題なくアンインストールできるかどうかを確認してください。
于 2012-10-16T21:21:36.503 に答える