我的代码: ProgramName中= CCleaner的
public static bool CheckProgram(string ProgramName)
{
bool status = false;
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
if (!string.IsNullOrEmpty(Convert.ToString(subkey.GetValue("DisplayName"))))
{
if (Convert.ToString(subkey.GetValue("DisplayName")).Contains(ProgramName))
status = true;
}
}
}
}
return status;
}
当我运行我的程序时,它找不到" CClenear"但当我写" Java"它的工作。我确定我的计算机上安装了%100 CClenear。 Java,Microsoft Office,Gom Player发现但Ccleaner,Spotify等未找到。你能帮助我哪里错了吗?感谢。
答案 0 :(得分:0)
首先,您也可以仔细检查密钥是否存在。您可以更改代码以将所有显示名称写出到文件中,然后在文件中搜索您要查找的内容。以下代码将所有非空显示名称保存到列表中,然后将该列表写入文件(如果需要,请指定其他文件路径):
string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
List<string>displayNames = new List<string>();
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey))
{
foreach (string subkeyName in key.GetSubKeyNames())
{
using (RegistryKey productKey = key.OpenSubKey(subkeyName))
{
var displayName = Convert.ToString(productKey.GetValue("DisplayName"));
if (!string.IsNullOrWhiteSpace(displayName)) displayNames.Add(displayName);
}
}
}
var fileName = @"c:\temp\DisplayNames.txt";
File.WriteAllLines(fileName, displayNames);
现在您可以打开文本文件并找到您需要搜索的确切名称(如果确实存在)。
另一种选择是使用IndexOf
方法进行不区分大小写的比较。如果在另一个字符串中找到,IndexOf
将返回基于0
的一个字符串的索引,如果找不到该字符串,则返回-1
。它还需要一个参数,允许您进行不区分大小写的搜索(它还会搜索整个字符串以查找搜索词,而不只是搜索开头)。
您可以通过更改以下行来在原始代码中执行此操作:
if (Convert.ToString(subkey.GetValue("DisplayName")).Contains(ProgramName))
对此:
if (Convert.ToString(subkey.GetValue("DisplayName"))
.IndexOf(ProgramName, StringComparison.OrdinalIgnoreCase) > -1)