今天在項目開發過程當中遇到了一個場景。在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