我之前在以下链接中的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位版本的存在,使用上面的代码。
提前致谢。
答案 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