【问题标题】:WIX - Automatically detect and install MS KB patchWIX - 自动检测和安装 MS KB 补丁
【发布时间】:2015-12-06 02:43:48
【问题描述】:

我正在尝试修改 WIX 安装程序包,以便它可以检测特定 Microsoft 知识库补丁/更新的存在,然后如果补丁是不检测。我的操作顺序是:

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

步骤 23 对我来说并不是 100% 显而易见的。 I've found a possible solution via another StackOverflow 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 补丁,以及如何为传递给的第一个参数生成适当的哈希/UUID函数?

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

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

谢谢。

【问题讨论】:

  • 如果先决条件不满足,我通常建议您在包中放置一个安装条件以失败,而是使用引导程序/链接器来满足这些先决条件。 WiX 的引导程序/链接程序/下载程序/重启处理程序/包管理器(又名刻录引擎)使用WiX Bundles 来描述安装顺序。
  • stackoverflow.com/a/29946122/492 上回答 - 也可以在那里查看其他答案

标签: wix windows-installer wix3.8 windows-update


【解决方案1】:

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

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

无论哪种方式,要检查并安装更新,我都会使用 Windows 更新 API。该更新可通过 Windows Update 获得,这种东西会告诉您该更新是否适用于特定系统并且还会下载它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多