今天在项目开发过程当中遇到了一个场景。在C#写的Winform程序中,要判断一个驱动程序是否安装。数组
驱动程序安装后可在控制面板中的“程序和功能”界面找到,为此个人C#程序也须要获取这个列表,以判断驱动程序是否安装。函数
我参考了这篇文章:http://www.jb51.net/article/69506.htm.net
对这篇文章中的函数略做修改,写了个函数以下,若驱动程序已安装则返回true,不然返回false:code
/// <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; }
ENDorm