【发布时间】:2012-03-17 16:37:59
【问题描述】:
我们的 WiX 安装程序将 .NET 4.0 WinForms 应用程序部署到 Windows Vista 和 7 桌面。该应用程序包含一个Portable Class Library,它需要一个.NET patch (KB2468871)。我们需要安装补丁作为先决条件。可以通过多种方式应用补丁:
- 下载 KB2468871 补丁并安装
- 安装Portable Library Tools
- 作为使用 ClickOnce 的先决条件(可能是 #1 的变体)
使用来自 a similar question 的建议,我创建了一个 CustomAction 来检查我演示的 QFE (#1),它在找到时返回 true。
private static bool IsPatchAlreadyInstalled()
{
// If the patch is installed, we can find it using WMI
var query = new SelectQuery("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'Q2468871' OR HotFixID = 'KB2468871'");
var results = new ManagementObjectSearcher(query).Get();
return results.Count > 0;
}
不幸的是,这在我的开发机器上失败了,因为补丁是作为工具 (#2) 的一部分安装的。我还没有看到情况 #3。
检测补丁是否已应用的更好方法是什么?
【问题讨论】:
标签: c# .net windows wix windows-installer