今天在项目开发过程中遇到了一个场景。在C#写的Winform程序中,要判断一个驱动程序是否安装。
驱动程序安装后可在控制面板中的“程序和功能”界面找到,为此我的C#程序也需要获取这个列表,以判断驱动程序是否安装。
我参考了这篇文章:
对这篇文章中的函数略作修改,写了个函数如下,若驱动程序已安装则返回true,否则返回false:
////// 检查注册表,查看是否安装指定驱动/// 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