簡體   English   中英

WIX-自動檢測並安裝MS KB補丁

[英]WIX - Automatically detect and install MS KB patch

我試圖修改WIX安裝程序包,以便它可以檢測到特定的Microsoft知識庫補丁/更新,然后為用戶提供一個機會,如果未檢測到該補丁,則可以即時下載並安裝它。 我的操作順序是:

  1. 檢測用戶是否在Windows 8.1上進行安裝(簡單,與VersionNT進行比較)。
  2. 檢測是否已安裝KB 2883200
  3. 如果檢測到,請提供一個對話框,提供下載和安裝軟件包的機會。

2步和第3步對我來說不是100%顯而易見的。 我通過另一個StackOverflow帖子找到了一種可能的解決方案 ,但我不明白為什么需要同時提供哈希和KB號。 例如:

樣例功能


public static bool IsPatchAlreadyInstalled(string productCode, string patchCode)
{
    var patches = 
        PatchInstallation.GetPatches(null, productCode, null, UserContexts.Machine, PatchStates.Applied);

    return patches.Any(patch => patch.DisplayName == patchCode);
}

采用


IsPatchAlreadyInstalled("{F5B09CFD-F0B2-36AF-8DF4-1DF6B63FC7B4}", "KB2468871");// .NET Framework 4 Client Profile 64-bit
IsPatchAlreadyInstalled("{8E34682C-8118-31F1-BC4C-98CD9675E1C2}", "KB2468871");// .NET Framework 4 Extended 64-bit
IsPatchAlreadyInstalled("{3C3901C5-3455-3E0A-A214-0B093A5070A6}", "KB2468871");// .NET Framework 4 Client Profile 32-bit
IsPatchAlreadyInstalled("{0A0CADCF-78DA-33C4-A350-CD51849B9702}", "KB2468871");// .NET Framework 4 Extended 32-bit

因此,我的問題的第一部分將是:如何使用上面的代碼來檢測是否已安裝KB 2883200補丁,以及如何為傳遞給該函數的第一個參數生成適當的哈希/ UUID?

接下來,我試圖顯示一個模式對話框,為用戶提供安裝補丁的機會嗎? 如果用戶在安裝程序中選擇“返回”,那么我希望再次進入相應的步驟時再次出現該對話框,以防他們意外拒絕安裝驅動程序的提議。

對於我的問題的第二部分也是最后一部分:如何提供這樣的對話框?是否有任何現有方法可以通過安裝程序下載和安裝MS KB補丁程序?還是必須從頭開始實現自己的方法?

謝謝。

該對話框將是一個對話框,您可以在MSI UI序列中插入該對話框,並在未安裝更新的情況下顯示該對話框,並在有條件的情況下發布該對話框。 在UI序列中執行任何此操作的潛在問題是您不會被提升,因此,如果為此需要提升的特權,則可能會遇到一些困難。

我認為Tom的建議是做到這一點的方法-使它成為構建自己的可執行文件進行檢查並將其與Burn集成的先決條件。

無論哪種方式,要檢查並安裝更新,我都會使用Windows Update API。 該更新可通過Windows Update獲得,這種事情告訴您該更新是否適用於特定系統,並且還會下載該更新:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa387102(v=vs.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM