WIX - 自动检测并安装 MS KB 补丁

WIX - Automatically detect and install MS KB patch

我正在尝试修改 WIX 安装程序包,以便它可以检测特定 Microsoft 知识库的存在 patch/update,然后为用户提供即时下载和安装的机会如果未检测到补丁。我的操作顺序是:

  1. 检测用户是否在 Windows 8.1 上安装(微不足道,与 VersionNT 进行比较)。
  2. 检测KB 2883200是否已经安装。
  3. 如果检测到,提供一个对话框,提供下载和安装包的机会。

步骤 23 对我来说并非 100% 显而易见。 I've found a possible solution via another Whosebug post,但我不明白为什么需要同时提供哈希和 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 补丁,以及如何生成适当的 hash/UUID对于传递给函数的第一个参数?

接下来,我试图让一个模态对话框出现,为用户提供安装补丁的机会?如果用户在安装程序中进入 "Back",我希望在再次到达适当的步骤时重新出现对话,以防他们不小心拒绝安装驱动程序的提议。

对于我的问题的第二部分也是最后一部分:我如何提供这样的对话框,是否有任何现有的方法可以通过安装程序下载和安装 MS KB 补丁,或者我是否可以必须从头开始实现我自己的方法?

谢谢。

该对话框将是一个对话框,您可以在 MSI UI 序列中插入该对话框,并在未安装更新时显示该对话框,并在有条件的情况下发布该对话框。在 UI 序列中执行任何此操作的一个潜在问题是您不会被提升,因此如果为此需要提升权限,您可能会遇到一些困难。

我认为 Tom 的建议是做到这一点的方法 - 将其作为构建自己的可执行文件以检查它的先决条件,并将其与 Burn 集成。

无论如何,要检查并安装更新,我会使用 Windows 更新 API。更新是通过Windows更新获得的,这种东西告诉你更新是否适用于特定的系统,也会下载它:

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