1

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

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

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

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

4

1 回答 1

1

该类Win32_Product仅代表由Windows Installer 安装的产品。看起来 Flash Player 使用了另一个安装服务。

下面介绍如何确定 Flash Player ActiveX 控件(用于 IE 的 Flash Player)的存在和版本:

  1. 尝试获取ProgIDSystem.Type对应的对象。ShockwaveFlash.ShockwaveFlash如果您未能获得它,则说明 Flash Player 未安装。如果成功,请转到步骤 2。
  2. 创建获得的Type对象的实例。
  3. 使用“$version”参数调用GetVariable获取的对象的方法。这将为您提供格式为“OS major,minor,release,build”的 Flash Player 版本字符串,例如“WIN 10,0,22,87”。

像这样的东西(免责声明:我不太了解 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 对象进行交互。

于 2009-08-24T17:06:17.637 回答