【发布时间】:2015-12-06 02:43:48
【问题描述】:
我正在尝试修改 WIX 安装程序包,以便它可以检测特定 Microsoft 知识库补丁/更新的存在,然后如果补丁是不检测。我的操作顺序是:
- 检测用户是否在 Windows 8.1 上安装(微不足道,与
VersionNT比较)。 - 检测是否已安装KB 2883200。
- 如果检测到,提供一个对话框,提供下载和安装软件包的机会。
步骤 2 和 3 对我来说并不是 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