首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取修补程序信息?

问获取修补程序信息?
EN

Stack Overflow用户
提问于 2011-12-23 12:39:16
回答 1查看 905关注 0票数 0

有谁知道,给定标识已安装产品的GUID,您如何使用C#找到为该产品安装的修补程序?

应用程序非常复杂,我们不时地通过Orca/MSI创建补丁(MSP文件)。然后,这些补丁可以安装在客户的计算机上,然后可以在程序和功能下的“查看已安装的更新”中查看。

我试过两种方法:

  1. 使用WMI我可以在Win32_Product中找到我的产品并检索那里的信息。但是,如果我然后查询Win32_PatchPackage或Win32_Patch是否与"ProductCode“匹配。我本来希望标题/描述包含我想要的信息,但我得到的只是另一组单独的GUID,这些GUID似乎不太清楚该如何处理它。类似地,使用注册表,我可以找到产品(在HKLM\Software\Microsoft\Uninstall下),通过深入挖掘,我可以找到修补程序(在HKLM\Software\Microsoft\Installer\UserData\S-1-5-18\Products)下,但关键并不明显)。这与我的产品安装程序GUID.

不一样

This question讨论了类似的问题,但是提问者正在寻找Windows修补程序,而我需要自己的应用程序补丁--所以解决方案对我来说并不有效。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-04 11:33:51

我能够通过将从ProductCode返回的Win32_PatchPackage插入到Win32 dll中来实现这一点,然后使用它。

代码语言:javascript
复制
    [DllImport("msi.dll", CharSet = CharSet.Unicode)]
    internal static extern Int32 MsiGetPatchInfoEx(string szPatchCode, string szProductCode, string szUserSid, int dwContext, string szProperty, [Out] StringBuilder lpValue, ref Int32 pcchValue);

    // See http://msdn.microsoft.com/en-us/library/windows/desktop/aa370128%28v=vs.85%29.aspx 
    // for valid values for the property paramater
    private static string getPatchInfoProperty(string patchCode, string productCode, string property)
    {
        StringBuilder output = new StringBuilder(512);
        int len = 512;
        MsiGetPatchInfoEx(patchCode, productCode, null, 4, property, output, ref len);
        return output.ToString();
    }

    public static string GetPatchDisplayName(string patchCode, string productCode)
    {
        return getPatchInfoProperty(patchCode, productCode, "DisplayName");
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8616175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档