今天在项目开发过程中遇到了一个场景。在C#写的Winform程序中,要判断一个驱动程序是否安装。
驱动程序安装后可在控制面板中的“程序和功能”界面找到,为此我的C#程序也需要获取这个列表,以判断驱动程序是否安装。
我参考了这篇文章:http://www.jb51.net/article/69506.htm
对这篇文章中的函数略作修改,写了个函数如下,若驱动程序已安装则返回true,否则返回false:
/// <summary>
/// 检查注册表,查看是否安装指定驱动
/// </summary>
public static bool CheckCryptoKit()
{
String[] softwareList = null;
ArrayList list = new ArrayList();
//从注册表中获取控制面板“卸载程序”中的程序和功能列表
RegistryKey Key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
if (Key != null) //如果系统禁止访问则返回null
{
foreach (String SubKeyName in Key.GetSubKeyNames())
{
//打开对应的软件名称
RegistryKey SubKey = Key.OpenSubKey(SubKeyName);
if (SubKey != null)
{
String SoftwareName = SubKey.GetValue("DisplayName", "Nothing").ToString();
//如果没有取到,则不存入动态数组
if (SoftwareName != "Nothing")
{
list.Add(SoftwareName);
}
}
}
//强制转换成字符串数组,防止被修改数据溢出
softwareList = (string[])list.ToArray(typeof(string));
}
//判断有无找到驱动中要找的关键字,有则返回true,无则返回false
foreach (string software in softwareList)
{
if (software.IndexOf("XXXXXXXXXXXXXXXXXX") > -1)
{
return true;
}
}
return false;
}
END