[英]Custom Wix Burn bootstrapper doesn't detect MSI install state
我正在創建一個基於Wix / Burn(3.6發行版)的自定義向導式引導程序。 我基於Wix 3.6引導程序代碼。
問題是我無法讓引導程序檢測到作為bundle的一部分的setup.msi的安裝狀態。
據我所知,所需要的只是調用Engine.Detect(),其中Engine是Bootstrapper應用程序中Wix引擎的一個實例。 那時我應該能夠查看Bootstrapper.Command.Action以查看所需的啟動操作。
我的包包含兩個項目:.NET 4(Web安裝)和我的setup.msi。
我懷疑我缺少確定我的向導應該進入維護模式還是安裝模式的步驟。
首先,要確定是否正在檢測包,您可以檢查當前用戶的臨時目錄中的日志文件。 它將告訴您是否已檢測到包裝。
現在確定是否進入維護模式還是安裝模式,您可以通過訂閱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;
}
}
上面的代碼示例摘自我的博客文章,內容涉及創建自定義WiX托管引導程序所需的最少代碼。
確定您的Bundle是否已安裝的簡單方法是使用WixBundleInstalled
變量。 成功安裝捆綁包后,該值將設置為非零。
此外,在WiX v3.7 +中, OnDetectBegin
回調現在可以告訴您是否已安裝捆綁軟件,因此您不必正常查詢變量。
進行這些更改是為了更容易檢測維護模式,以避免@BryanJ建議的完全合理的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.