2013-01-09 84 views
3

我正在基於Wix/Burn(3.6發佈版本)創建自定義嚮導式引導程序。我已經基於Wix 3.6引導程序代碼。自定義Wix Burn引導程序未檢測到MSI安裝狀態

問題是我無法讓引導程序檢測到我的setup.msi的安裝狀態,它是該軟件包的一部分。

據我所知,所需要的只是調用Engine.Detect(),其中Engine是引導程序應用程序中的Wix引擎的實例。那時我應該可以查看Bootstrapper.Command.Action來查看所需的啓動操作是什麼。

我的軟件包包含兩個項目:.NET 4(web安裝)和我的setup.msi。

我懷疑我缺少一個步驟來確定是否應該將我的嚮導置於維護模式與安裝模式之間。

回答

4

首先,要確定包是否被檢測到,您可以檢查當前用戶的臨時目錄中的日誌文件。它會告訴你包裝是否被檢測到。

現在要確定是否進入維護模式與安裝模式,可以通過訂閱DetectPackageComplete事件來檢查軟件包狀態。在下面的示例中,我的UI使用兩個屬性InstallEnabled和UninstallEnabled來確定向用戶呈現的「模式」。

private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e) 
    { 
     if (e.PackageId == "DummyInstallationPackageId") 
     { 
      if (e.State == PackageState.Absent) 
       InstallEnabled = true; 
      else if (e.State == PackageState.Present) 
       UninstallEnabled = true; 
     } 
    } 

上面的代碼示例是從我的博客文章中創建Custom WiX Managed Bootstrapper Application所需的最小片段。

+0

謝謝布萊恩。我會給這個鏡頭。 –

+0

尋找這個:) ..謝謝@BryanJ –

3

確定您的Bundle是否已安裝的簡單方法是使用WixBundleInstalled變量。在您的Bundle安裝成功後,它將被設置爲非零。

此外,在WiX v3.7 +中,OnDetectBegin回調現在會告訴您捆綁軟件是否已安裝,因此您不必正常查詢變量。

這些更改是爲了更容易檢測維護模式,以避免@BryanJ建議的完全合理的解決方案。

相關問題