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 の関係に問題があります。この問題で立ち往生しているので、助けてください。