在 visual basic .net 中編程時(shí),可以選擇通過(guò) visual basic .net 提供的函數(shù)或者 .net 框架的注冊(cè)表類(lèi)來(lái)訪(fǎng)問(wèn)注冊(cè)表。雖然多數(shù)情況下使用 visual basic 函數(shù)已經(jīng)足夠,但有時(shí)仍需要使用 .net 框架。
注冊(cè)表儲(chǔ)存了有關(guān)操作系統(tǒng)的信息以及計(jì)算機(jī)上安裝的應(yīng)用程序的信息。使用注冊(cè)表可能會(huì)影響安全性。因此,必須仔細(xì)檢查訪(fǎng)問(wèn)注冊(cè)表的代碼以確保不會(huì)給將運(yùn)行該代碼的計(jì)算機(jī)帶來(lái)安全影響。
注冊(cè)表項(xiàng)包括兩部分:值名稱(chēng)和值。項(xiàng)目存儲(chǔ)在項(xiàng)和子項(xiàng)系統(tǒng)中,如同文件系統(tǒng)中文件存儲(chǔ)在目錄和子目錄中一樣。
前提條件要掌握本文內(nèi)容,必須具備以下前提條件: 熟悉以前版本的 visual basic。 掌握有關(guān)注冊(cè)表的設(shè)計(jì)和用途的知識(shí)。 理解訪(fǎng)問(wèn)注冊(cè)表的安全問(wèn)題。
visual basic .net 提供了四個(gè)函數(shù)以訪(fǎng)問(wèn)注冊(cè)表。要使用這些函數(shù),必須具有registrypermissionaccess權(quán)限。以完全信任身份運(yùn)行的任何代碼(根據(jù)默認(rèn)的安全原則,這是指安裝在用戶(hù)本地硬盤(pán)驅(qū)動(dòng)器上的任何代碼)都具有訪(fǎng)問(wèn)注冊(cè)表的權(quán)限。
| visual basic .net 函數(shù) | 說(shuō)明 | 
|---|---|
| deletesetting | 從注冊(cè)表中應(yīng)用程序的項(xiàng)目中刪除一段或一個(gè)項(xiàng)設(shè)置。 | 
| getsetting | 從注冊(cè)表中應(yīng)用程序的項(xiàng)目中返回一個(gè)項(xiàng)設(shè)置值。 | 
| getallsettings | 從注冊(cè)表中應(yīng)用程序的項(xiàng)目中返回項(xiàng)設(shè)置及其值的列表。 | 
| savesetting | 在注冊(cè)表中創(chuàng)建或保存一個(gè)應(yīng)用程序項(xiàng)目。 | 
如果不能保存項(xiàng)設(shè)置,將產(chǎn)生一個(gè)argumentexception對(duì)象。
下面的示例創(chuàng)建了一個(gè)注冊(cè)表項(xiàng)和兩個(gè)子項(xiàng)。接著顯示第一個(gè)項(xiàng)的值,并顯示第一個(gè)項(xiàng)及其子項(xiàng)的值。然后刪除第二個(gè)子項(xiàng),并顯示第一個(gè)項(xiàng)及其子項(xiàng)的值,以確認(rèn)刪除了第二個(gè)子項(xiàng)。
' 創(chuàng)建第一個(gè)項(xiàng)。從一個(gè)非交互進(jìn)程(如 mtx.exe)訪(fǎng)問(wèn)的注冊(cè)表設(shè)置應(yīng)存儲(chǔ)在hkey_local_machine/software/注冊(cè)表項(xiàng)下。
使用 .net 框架訪(fǎng)問(wèn)注冊(cè)表下的項(xiàng),因而具有一定的局限性。為此,可以使用 .net 框架 microsoft.win32 名稱(chēng)空間中的registry類(lèi)。registry類(lèi)提供基本的注冊(cè)表項(xiàng),用于訪(fǎng)問(wèn)子項(xiàng)及其值。基項(xiàng)本身是只讀的。下表列出并說(shuō)明了registry類(lèi)中提供的七個(gè)項(xiàng)。
| 項(xiàng) | 說(shuō)明 | 
|---|---|
| classesroot | 定義文檔的類(lèi)型以及與這些類(lèi)型相關(guān)的特性。 | 
| currentconfig | 包含與用戶(hù)無(wú)關(guān)的硬件配置信息。 | 
| currentuser | 包含有關(guān)當(dāng)前用戶(hù)的首選項(xiàng)(如環(huán)境變量)的信息。 | 
| dyndata | 包含動(dòng)態(tài)注冊(cè)表數(shù)據(jù),例如虛擬設(shè)備驅(qū)動(dòng)程序使用的注冊(cè)表數(shù)據(jù)。 | 
| localmachine | 包含五個(gè)子項(xiàng)(hardware、sam、security、software 和 system),存儲(chǔ)本地計(jì)算機(jī)的配置數(shù)據(jù)。 | 
| performancedata | 包含軟件組件的性能信息。 | 
| users | 包含有關(guān)默認(rèn)用戶(hù)首選項(xiàng)的信息。 | 
下面的示例顯示了如何從 hkey_current_user 中讀取一個(gè) dword 值:
imports microsoft.win32
dim regversion as registrykey
dim keyvalue as string
keyvalue = software//microsoft//testapp//1.0
regversion = registry.currentuser.opensubkey(keyvalue, false)
dim intversion as integer = 0
if (not regversion is nothing) then
intversion = regversion.getvalue("version", 0)
regversion.close()
end if
| imports microsoft.win32 dim intversion as integer = 0 | 
system.security.permission名稱(chēng)空間中的registrypermission類(lèi)控制了訪(fǎng)問(wèn)注冊(cè)表變量的能力。注冊(cè)表變量不應(yīng)存儲(chǔ)在不具備registrypermission的代碼可以訪(fǎng)問(wèn)的內(nèi)存位置。同樣,在授予權(quán)限時(shí),應(yīng)只授予完成工作所需的最小權(quán)限。
注冊(cè)表訪(fǎng)問(wèn)權(quán)限值由registrypermissionaccess枚舉定義。下表詳細(xì)說(shuō)明了其中的各項(xiàng)。
| 值 | 說(shuō)明 | 
|---|---|
| allaccess | 對(duì)注冊(cè)表變量的創(chuàng)建,讀取和寫(xiě)入訪(fǎng)問(wèn)。 | 
| create | 對(duì)注冊(cè)表變量的創(chuàng)建訪(fǎng)問(wèn)。 | 
| noaccess | 不能訪(fǎng)問(wèn)注冊(cè)表變量。 | 
| read | 對(duì)注冊(cè)表變量的讀取訪(fǎng)問(wèn)。 | 
| write | 對(duì)注冊(cè)表變量的寫(xiě)入訪(fǎng)問(wèn)。 | 
| registrypermissionaccess.write or registrypermissionaccess.read _ "hkey_local_machine/software/microsoft/testapp" | 
當(dāng)使用部署項(xiàng)目時(shí),還可以選擇使用注冊(cè)表編輯器來(lái)指定要添加到目標(biāo)計(jì)算機(jī)的注冊(cè)表中的注冊(cè)表項(xiàng)和項(xiàng)值。
訪(fǎng)問(wèn)注冊(cè)表編輯器打開(kāi)一個(gè)部署項(xiàng)目。 在view(查看)菜單中,指向editor(編輯器),然后單擊registry(注冊(cè)表)。
注冊(cè)表是存儲(chǔ)有關(guān)應(yīng)用程序以及各個(gè)用戶(hù)設(shè)置的信息的最佳位置。此外,也可以從中查看有關(guān)系統(tǒng)硬件或要與之交互的應(yīng)用程序的信息。
對(duì)于大多數(shù)項(xiàng)目,通過(guò) visual basic 運(yùn)行時(shí)函數(shù)訪(fǎng)問(wèn)注冊(cè)表已經(jīng)足夠。但在某些情況下,也可能需要使用 .net 框架的registry類(lèi)。這兩種操作都很簡(jiǎn)單,但由于這種訪(fǎng)問(wèn)涉及安全問(wèn)題,所以要注意避免產(chǎn)生安全隱患,例如在項(xiàng)中包含一個(gè)純文本密碼或其他敏感信息等。
新聞熱點(diǎn)
疑難解答
圖片精選