无法在WMI win32_product表中找到Flash Player

时间:2009-08-24 15:32:43

标签: wmi flash wmi-query

为什么Macromedia Flash Player不在WMI win32_product表中? Flash Player安装在我正在执行查询的计算机上。

我正在尝试执行以下查询:

Select * From win32_product where name like '%Flash%'

是否有其他方法可以获取任何已安装的Flash Player的版本。该项目是用C#开发的。

1 个答案:

答案 0 :(得分:1)

Win32_Product类仅代表Windows Installer安装的产品。看起来Flash Player使用其他安装服务。

以下是如何确定Flash Player ActiveX控件(适用于IE的Flash Player)的存在和版本:

  1. 尝试获取与System.Type ProgID对应的ShockwaveFlash.ShockwaveFlash对象。如果未能获取,则表明未安装Flash Player。如果成功,请转到步骤2.
  2. 创建获取的Type对象的实例。
  3. 使用“$ version”参数调用获取的对象的GetVariable方法。这将为您提供“OS major,minor,release,build”形式的Flash Player版本字符串,例如“赢10,0,22,87”。
  4. 这样的事情(免责声明:我不太了解C#,所以这段代码可能很蹩脚):

    Type tFlash = Type.GetTypeFromProgID("ShockwaveFlash.ShockwaveFlash");
    if (tFlash != null)
    {
        object FlashPlayer = Activator.CreateInstance(tFlash);
        string version = (string) tFlash.InvokeMember("GetVariable",
            System.Reflection.BindingFlags.InvokeMethod,
            null, FlashPlayer, new Object[] {"$version"});
    
        Console.WriteLine(version);
    }
    else
    {
        Console.WriteLine("Flash Player is not installed.");
    }
    

    请注意,此方法要求您为x86平台构建应用程序,因为Flash Player当前仅为32位,并且您无法从64位代码与其ActiveX对象进行交互。