2011-02-24 106 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

相關問題