2012-10-10 36 views
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的關係。請幫我解決這個問題。

回答

4

您的註冊表可能會因爲創建第一個Burn引導程序而受到很多試驗和錯誤的干擾。我會建議嘗試以下操作:

  1. 搜索註冊表中的「家屬」(例如:{08e74372-83f2-4594-833b-e924b418b360}),並刪除這些密鑰
  2. 卸載應用程序(應成功)
  3. 在註冊表中搜索以前安裝的其他.msi的產品代碼。驗證它不在註冊表中。如果確實存在,請刪除這些密鑰。
  4. 嘗試重新安裝,看看您是否可以卸載好。
+0

我同意你的解決方法,但問題出在我的modelView代碼上。說我只安裝了msi2.msi,它很好。現在卸載,當我繼續;我得到的UI有 「安裝」按鈕激活。由於「DummyInstallationPackageId3」(msi1.msi)沒有安裝,因此它會使「安裝」按鈕處於活動狀態。有什麼方法可以糾正這種行爲嗎? 我主要是遵循你的博客給出的例子。 –

+0

在這種情況下,您可以爲每個包提供一個屬性,如InstallEnabledPackageId3和InstallEnabledPackageId2。然後將安裝按鈕綁定到InstallEnabled,並將其定義爲像public Bool InstallEnabled {get {return(InstallEnabledPackageId3 && InstallEnabled PackageId2)?真假; }} – BryanJ

+0

擁有2個布爾值幫​​助解決了這個問題。我希望問題是更復雜的'依賴';但即使是個人安裝/卸載msi2.msi也很好。日Thnx。 雖然,我想知道爲什麼Burn會將「捆綁軟件名稱」註冊爲獨立msi的依賴項?我在燒錄日誌中看到了這些信息。 –