您好,登錄后才能下訂單哦!
這篇文章給大家介紹利用C#怎么對注冊表建獲取并指定鍵值,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
某些程序必須依賴指定運(yùn)行環(huán)境。那么讀取注冊表來判斷此電腦是否有執(zhí)行環(huán)境是個很不錯的辦法。因為每個軟件安裝之后都會在注冊表中注冊對應(yīng)的鍵值,并且有些鍵值是獨(dú)一無二的。
那么首先就需要找到那個具體的獨(dú)一無二的鍵值,以便程序在運(yùn)行之前能夠去讀取以判斷。
代碼如下:
class Program { private static string _sValue = string.Empty; static void Main(string[] args) { Console.WriteLine("請輸入待查找值:"); _sValue = Console.ReadLine(); Console.WriteLine($"正在查詢。。。"); var registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); //判斷機(jī)器位數(shù) int i = 0; GetKeyNames(registryKey, ref i); Console.WriteLine($"查詢結(jié)束。。。"); Console.ReadKey(); } /// <summary> /// 遍歷所有子項 /// </summary> /// <param name="subkey">節(jié)點</param> /// <param name="i"></param> private static void GetKeyNames(RegistryKey subkey, ref int i) { foreach (var subkey_name in subkey.GetSubKeyNames()) // 檢索包含所有子項名稱的字符串?dāng)?shù)組 { try { using (RegistryKey csubkey = subkey.OpenSubKey(subkey_name)) { GetValueName(csubkey, ref i); GetKeyNames(csubkey, ref i); } } catch { } } } /// <summary> /// 若包含輸入值則輸出記錄 /// </summary> /// <param name="subkey">節(jié)點</param> /// <param name="i"></param> private static void GetValueName(RegistryKey subkey, ref int i) { foreach (var name in subkey.GetValueNames()) //檢索包含與此項關(guān)聯(lián)的所有值名稱的字符串?dāng)?shù)組 { var sValue = subkey.GetValue(name) + string.Empty; if (string.Compare(sValue, string.Format(@"{0}", _sValue, StringComparison.OrdinalIgnoreCase)) == 0) { Console.WriteLine(++i + "\t" + subkey.Name); } } } }
現(xiàn)在查找含有E:\ArcGIS\Python27\ArcGISx6410.2\python.exe的鍵:
結(jié)果如下:
補(bǔ)充知識:利用C#訪問注冊表獲取軟件的安裝路徑
絕大多數(shù)軟件,基本上都會在注冊表中記錄自己的名字和安裝路徑信息。
在注冊表中記錄這些信息的位置是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
因此,我們只要能訪問到注冊表的這個位置,就可以獲取到某些軟件的名稱和安裝路徑信息。
本博文使用C#訪問注冊表獲取軟件的安裝路徑并進(jìn)行顯示。
1 示例程序主畫面說明
示例程序主畫面如下圖所示。
在畫面中的文本框中輸入可執(zhí)行程序的名稱,點擊“獲取路徑”按鈕,便會在畫面中的下一行(“獲取路徑”按鈕所在行的下一行)顯示出該程序完整的安裝路徑信息。
這里輸入的可執(zhí)行文件名稱必須是程序在注冊表中的名稱,如Adobe Reader在注冊表中的名稱為“AcroRd32.exe”。
2 示例程序完整代碼
using System; using System.Windows.Forms; using Microsoft.Win32; namespace GetSoftWarePathExp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { string softName = textBox1.Text.ToString(); string strKeyName = string.Empty; string softPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"; RegistryKey regKey = Registry.LocalMachine; RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ".exe", false); object objResult = regSubKey.GetValue(strKeyName); RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName); if (regValueKind == Microsoft.Win32.RegistryValueKind.String) { this.label3.Text = objResult.ToString(); } } catch { this.label3.Text = "朋友,獲取程序路徑失敗!"; } } } }
注意:需要添加引用:using Microsoft.Win32;
3 代碼說明
(1)代碼“RegistryKey regKey = Registry.LocalMachine”使regKey 指向注冊表主鍵HKEY_LOCAL_MACHINE。
(2)代碼“RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ".exe", false)”使regSubKey 指向我們需要查找的注冊表子健。
(3)代碼“object objResult = regSubKey.GetValue(strKeyName)”獲取注冊表的鍵值。
(4)代碼“RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName)”獲取注冊表的鍵值類型。
(5)最后輸出獲取到的鍵值信息。
(6)程序若出錯,輸出“朋友,獲取程序路徑失??!”的提示信息。
注意:RegistryKey.GetValue和RegistryKey.GetValueKind方法均需要傳入一個參數(shù)指示要檢索的值的名稱,當(dāng)傳遞給RegistryKey.GetValue和RegistryKey.GetValueKind方法的參數(shù)為一個空字符串時,則檢索的是一個未命名的值,在注冊表編輯器中顯示此未命名的值時,將顯示字符串“(Default)”,而不是顯示一個名稱。
在本例中,傳入的就是一個空字符串,若以檢索軟件Adobe Reader的安裝信息為例,則獲取的是下圖中的第一條注冊表信息,此時名稱項顯示字符串“(默認(rèn))”。
4 程序運(yùn)行結(jié)果
(1)獲取Adobe Reader的安裝路徑
輸入“AcroRd32”,點擊“獲取路徑”,得到以下結(jié)果,是不是和注冊表中記錄的信息一致啊。
(2)獲取chrome的安裝路徑
輸入“chrome”,點擊“獲取路徑”,得到以下結(jié)果,是不是和注冊表中記錄的信息一致啊。
5 多說兩句
在開發(fā)中,有時會指定特定程序來執(zhí)行某類操作,這時可能會涉及讀取注冊表信息來打開程序。只是有些程序可能不存在這樣的注冊信息,這時,我們就必須采取其他方式了。
關(guān)于利用C#怎么對注冊表建獲取并指定鍵值就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。