2011-02-24 1 views
1
내가 가진

은 이전에 따라와 링크 -플래시 플레이어 10.2.161.23의 64 비트 버전이 시스템에 설치되어 있는지 여부를 확인하는 방법 IN 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의 값을 감지하지 못하고있다 "는 널 (null)"입니다.

위의 코드를 사용하여 64 비트 버전의 존재를 감지하기 위해 64 비트 버전 플래시가 필요하다는 이유는 알지 못합니다.

감사의 말 전진.

답변

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"이 무엇인지 알 수 있습니까? 의미 ... PLZ 알려주세요 – codeLover

+0

레지스트리의 하위 키입니다. RegEdit을 열어서 모두 볼 수 있으며 코드에 표시된대로 하나의 음성으로 이동합니다 ... 확인할 필요가있는 필드는 "DisplayVersion"입니다. , 당신은 소프트웨어 이름과 그의 버전을 검색하기위한 검색 기준으로 전달할 수 있습니다 ... – Achilleterzo

+1

고마워. 정말로 ossom. – codeLover

관련 문제