2011-02-24 68 views
1

我早前曾提出这样的问题在计算器在跟随着链路如何检查64位版本的Flash Player 10.2.161.23是否安装在系统中或不安装在C#中?

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和“类型” varable的值是“空”。

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

在此先感谢。

回答

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

+0

我可以知道语句displayName = subkey.GetValue(“DisplayName”)中的字符串“DisplayName”作为字符串是什么吗? signify .. PLz让我知道 – codeLover

+0

是注册表的一个子项,你可以通过打开RegEdit看到它,并转到其中一个声音,如代码所示... 您需要检查的字段也是“DisplayVersion” ,你可以通过它作为搜索软件名称和他的版本的搜索条件... – Achilleterzo

+1

非常感谢。真的很烦。 – codeLover

相关问题