3
我做了一個封裝2 msi(msi1,msi2)的燒錄包。在UI中,我使用複選框要求用戶選擇要安裝的MSI。Wix Burn問題:卸載失敗,說「找到依賴」
現在如果用戶選擇其中一個msi進行安裝,安裝會很順利。但是,卸載操作過程中,燃燒日誌文件說:
[][: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
在安裝的情況下,我選擇安裝msi2和NOT MSI1。
我的包代碼如下所示:
<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進行安裝,那麼卸載工作正常。
國際海事組織,有一些問題b/w捆綁和2 msi的關係。請幫我解決這個問題。
我同意你的解決方法,但問題出在我的modelView代碼上。說我只安裝了msi2.msi,它很好。現在卸載,當我繼續;我得到的UI有 「安裝」按鈕激活。由於「DummyInstallationPackageId3」(msi1.msi)沒有安裝,因此它會使「安裝」按鈕處於活動狀態。有什麼方法可以糾正這種行爲嗎? 我主要是遵循你的博客給出的例子。 –
在這種情況下,您可以爲每個包提供一個屬性,如InstallEnabledPackageId3和InstallEnabledPackageId2。然後將安裝按鈕綁定到InstallEnabled,並將其定義爲像public Bool InstallEnabled {get {return(InstallEnabledPackageId3 && InstallEnabled PackageId2)?真假; }} – BryanJ
擁有2個布爾值幫助解決了這個問題。我希望問題是更復雜的'依賴';但即使是個人安裝/卸載msi2.msi也很好。日Thnx。 雖然,我想知道爲什麼Burn會將「捆綁軟件名稱」註冊爲獨立msi的依賴項?我在燒錄日誌中看到了這些信息。 –