如何检查系统中是否安装了64位版本的flash player 10.2.161.23 IN C#?

时间:2011-02-24 08:54:02

标签: c# flash 64-bit

我之前在以下链接中的stackoverflow中询问了问题 -

  

How to check if a particular version of flash player is installed or not in C#.?

Type type = Type.GetTypeFromProgID("ShockwaveFlash.ShockwaveFlash");
object flashObject = Activator.CreateInstance(type);

    object versionString = flashObject.GetType().InvokeMember("GetVariable", BindingFlags.InvokeMethod,null, flashObject, new object[] {"$version"}); 

但我的代码能够检测64位版本10.2.161.23,只有在系统上安装了其他32位版本10.1.102.64时才能检测到。

  

但是当我卸载其他版本时   10.1.102.64,从系统中,我的代码没有检测到64位版本   10.2.161.23和“type”varable的值为“null”。

我不知道为什么64位版本需要一个32位版本的闪存来检测64位版本的存在,使用上面的代码。

提前致谢。

1 个答案:

答案 0 :(得分:1)

一个很好的解决方案就是这个功能需要很久以前从其他网站开始:

    public static bool IsApplictionInstalled(string p_name)
    {
        string displayName;
        RegistryKey key;

        // search in: CurrentUser
        key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        if (key != null) foreach (String keyName in key.GetSubKeyNames())
        {
            RegistryKey subkey = key.OpenSubKey(keyName);
            displayName = subkey.GetValue("DisplayName") as string;
            if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
            {
                return true;
            }
        }

        // search in: LocalMachine_32
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        if (key != null) foreach (String keyName in key.GetSubKeyNames())
        {
            RegistryKey subkey = key.OpenSubKey(keyName);
            displayName = subkey.GetValue("DisplayName") as string;
            if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
            {
                return true;
            }
        }

        // search in: LocalMachine_64
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall");
        if (key != null) foreach (String keyName in key.GetSubKeyNames())
        {
            RegistryKey subkey = key.OpenSubKey(keyName);
            displayName = subkey.GetValue("DisplayName") as string;
            if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
            {
                return true;
            }
        }
        // NOT FOUND
        return false;
    }

您可以尝试使用它来执行搜索,例如子键并更改它:

if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)

对此:

if (displayName.Contains(p_name) == true) //"Flash Player" is your case... (untested) 

来源:http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html