中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

c#使用Microsoft.Win32的Registry 和RegistryKey類操作注冊(cè)表

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

要訪問(wèn)注冊(cè)表,可以使用Microsoft.Win32命名空間中的兩個(gè)類Registry 和RegistryKey。RegistryKey實(shí)例表示一個(gè)注冊(cè)表項(xiàng),這個(gè)類的方法可以瀏覽子鍵、創(chuàng)建新鍵、讀取或修改鍵中的值。換言之,該類可以完成對(duì)注冊(cè)表項(xiàng)進(jìn)行的所有操作(除了設(shè)置鍵的安全級(jí)別之外)。RegistryKey類可以用于完成對(duì)注冊(cè)表的所有操作。Registry是不能實(shí)例化的一個(gè)類。它的作用只是提供表示頂級(jí)鍵的RegistryKey實(shí)例(不同的巢),以便開始在注冊(cè)表中瀏覽。Registry是通過(guò)靜態(tài)屬性來(lái)提供這些實(shí)例的,這些屬性共有7個(gè),分別是ClassesRoot、CurrentConfig、CurrentUser、DynData、LocalMachine、PerformanceData和 Users。用戶可以很快猜出它們分別與哪個(gè)巢相對(duì)應(yīng)。

例如,要獲得一個(gè)表示HKLM鍵的RegistryKey實(shí)例,可以編寫下面的代碼:

RegistryKey hklm = Registry.LocalMachine;

獲得RegistryKey對(duì)象引用的過(guò)程,視為打開一個(gè)鍵。

用戶可能會(huì)認(rèn)為,因?yàn)樽?cè)表的層次結(jié)構(gòu)類似于文件系統(tǒng),所以RegistryKey的方法類似于DirectoryInfo的方法,但實(shí)際上并非如此。訪問(wèn)注冊(cè)表的方式通常不同于使用文件和文件夾的方式,RegistryKey執(zhí)行的方法可以反映這種不同。

最明顯的區(qū)別是如何在注冊(cè)表的給定位置上打開一個(gè)注冊(cè)表項(xiàng)。Registry類沒有用戶可以使用的公共構(gòu)造函數(shù),也沒有任何可以直接通過(guò)鍵的名稱來(lái)訪問(wèn)鍵的方法。但可以在相關(guān)的巢中從上至下瀏覽該鍵。如果要實(shí)例化一個(gè)RegistryKey對(duì)象,惟一的方式是從Registry的靜態(tài)屬性開始,向下瀏覽。例如,要讀取HKLM/Software/Microsoft鍵中的一些數(shù)據(jù),可以使用下面的代碼獲得它的一個(gè)引用:

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMicrosoft = hkSoftware.OpenSubKey("Microsoft");

以這種方式訪問(wèn)注冊(cè)表項(xiàng)是只讀訪問(wèn)。如果要寫入該鍵(包括寫入其值,或創(chuàng)建和刪除其子鍵),就需要使用OpenSubKey的另一個(gè)重寫方法,該方法的第二個(gè)參數(shù)是bool類型,表示是否要對(duì)該鍵進(jìn)行讀寫訪問(wèn)。例如,如果要修改Microsoft鍵(并假定用戶是一個(gè)系統(tǒng)管理員,有修改該鍵的許可),就應(yīng)編寫如下代碼:

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMicrosoft = hkSoftware.OpenSubKey("Microsoft", true);

因?yàn)檫@個(gè)鍵包含Microsoft應(yīng)用程序使用的信息,在大多數(shù)情況下,就不應(yīng)修改這個(gè)特定鍵。

如果這個(gè)鍵已經(jīng)存在,就應(yīng)調(diào)用OpenSubKey()方法。如果這個(gè)鍵不存在,就返回一個(gè)空引用。如果要?jiǎng)?chuàng)建一個(gè)鍵,就應(yīng)使用CreateSubKey()方法(該方法會(huì)通過(guò)返回的引用,自動(dòng)提供該鍵的讀寫訪問(wèn)):

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMine = hkSoftware.CreateSubKey("MyOwnSoftware");

CreateSubKey()工作的方式非常有趣:如果鍵不存在,它就創(chuàng)建這個(gè)鍵。但如果鍵已經(jīng)存在,它就會(huì)返回一個(gè)表示該鍵的RegistryKey實(shí)例。這個(gè)方法采用這樣的工作方式,其原因是用戶總是可以使用這個(gè)鍵。注冊(cè)表包含長(zhǎng)期數(shù)據(jù),例如Windows和各種應(yīng)用程序的配置信息。因此用戶并不需要經(jīng)常顯式地創(chuàng)建鍵。

更常見的是,應(yīng)用程序需要確保某些數(shù)據(jù)在注冊(cè)表中是存在的。換言之,如果這些數(shù)據(jù)不存在,就要?jiǎng)?chuàng)建相關(guān)的鍵,但如果它們存在,就不需要做任何事。CreateSubKey()就可以完成這項(xiàng)任務(wù)。與FileInfo.Open()的情況不同,CreateSubKey()不會(huì)刪除任何數(shù)據(jù)。如果要?jiǎng)h除注冊(cè)表項(xiàng),就需要顯式調(diào)用RegistryKey.Delete()方法,因此注冊(cè)表對(duì)于Windows是非常重要的。如果刪除了一些重要的鍵,就會(huì)中斷Windows的執(zhí)行,此時(shí)就需要調(diào)試C#注冊(cè)表調(diào)用了。

定位了要讀取或修改的注冊(cè)表項(xiàng)后,就可以使用SetValue() 或 GetValue()方法設(shè)置或獲取該鍵中的值。這兩個(gè)方法的參數(shù)都是一個(gè)字符串,其中字符串給出了值的名稱,SetValue()還需要一個(gè)包含值的信息的對(duì)象引用。這個(gè)參數(shù)定義為對(duì)象引用,實(shí)際上可以是任何一個(gè)類的引用。SetValue()根據(jù)所提供的類的類型,確定把值設(shè)置為REG_SZ、REG_DWORD,還是 REG_BINARY。例如:

RegistryKey hkMine = HkSoftware.CreateSubKey("MyOwnSoftware");
hkMine.SetValue("MyStringValue", "Hello World");
hkMine.SetValue("MyIntValue", 20);

這段代碼設(shè)置鍵包含兩個(gè)值:MyStringValue的類型是REG_SZ,而MyIntValue的類型是REG_DWORD,這里只考慮這兩種類型,在后面的示例中會(huì)使用它們。

RegistryKey.GetValue()的工作方式也是這樣。它返回一個(gè)對(duì)象引用,如果該方法檢測(cè)到值的類型為REG_SZ,就返回一個(gè)字符串引用,如果值的類型為REG_DWORD,就返回一個(gè)int型值。

string stringValue = (string)hkMine.GetValue("MyStringValue");
int intValue = (int)hkMine.GetValue("MyIntValue"); 

最后,完成了讀取或修改數(shù)據(jù)后,應(yīng)關(guān)閉該鍵:

```csharp
hkMine.Close();

標(biāo)簽: 安全 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:用來(lái)檢查網(wǎng)絡(luò)和網(wǎng)速android小程序

下一篇:Android應(yīng)用通過(guò)socket與pc通信的示例代碼