C# 32位/64位系統(tǒng)下程序讀寫注冊(cè)表之差異
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
用C#實(shí)現(xiàn)注冊(cè)表的讀\寫是一件很容易的事情,在此不做詳細(xì)的講解。 用C#操作注冊(cè)表主要用到的兩個(gè)函數(shù)為(已經(jīng)滲透到下面的實(shí)例程序中,注:要引入Microsoft.Win32命名空間): 1:讀取鍵值-->Registry.LocalMachine.OpenSubKey(“..Key的路徑...”, true),這里的第2個(gè)bool類型的參數(shù)含義為:標(biāo)志打開的鍵值是否可以更改(即:是否可以用SetValue()給鍵賦值),然后調(diào)用GetValue()方法就能把鍵值讀取出來(lái)。 2:寫入鍵值-->Registry.LocalMachine.CreateSubKey("..Key的路徑..."),然后調(diào)用SetValue()寫入鍵值。 這里主要講解一下32位程序和64位程序在64位平臺(tái)上讀\寫注冊(cè)表的區(qū)別【注:32位程序是-->Build的Platform target為X86;64位程序-->Build的Platform target為X64;并且VS2010在默認(rèn)的狀態(tài)下為X86編譯環(huán)境(即:32位)】 簡(jiǎn)要復(fù)述一下理論基礎(chǔ):微軟為了讓32位程序不做任何修改就能運(yùn)行在64的操作系統(tǒng)上,添加了一個(gè)十分重要的WOW64子系統(tǒng)來(lái)實(shí)現(xiàn)這個(gè)功能,WOW64是Windows-32-on-Windows-64的簡(jiǎn)稱,從總體上來(lái)說(shuō),WOW64是一套基于用戶模式的動(dòng)態(tài)鏈接庫(kù),它可以把32位應(yīng)用程序的發(fā)出的命令翻譯成64位系統(tǒng)可以接受的格式,即:WOW 層處理諸如在 32 位和 64 位模式之間切換處理器以及模擬 32 位系統(tǒng)的事務(wù)。 32位與64位特點(diǎn)的兩個(gè)重要表現(xiàn)方面為:文件系統(tǒng)與注冊(cè)表。 文件系統(tǒng):32位進(jìn)程不能加載64位Dll,64位進(jìn)程也不可以加載32位Dll。 注冊(cè)表:為了防止注冊(cè)表鍵沖突,64位機(jī)器注冊(cè)表信息分成了兩個(gè)部分。一部分是專門給64位系統(tǒng)(即:64位程序)訪問(wèn)的,另一部分是專門給32位系統(tǒng)(即:32位程序)訪問(wèn)的,放在Wow6432Node下面。(Wow6432Node這個(gè)節(jié) 點(diǎn)存在于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面) 既然知道了注冊(cè)表信息分成了兩部分,那么就可以想到:用32位程序和64位程序去操作注冊(cè)表的時(shí)候會(huì)操作不同位置的注冊(cè)表信息。下面例子可以充分證明這種說(shuō)法。 1 using System; 將此段程序在X86(32位)平臺(tái)下編譯、運(yùn)行,會(huì)發(fā)現(xiàn)在注冊(cè)表的WOW6432Node節(jié)點(diǎn)下創(chuàng)建了子鍵:EricSun\MyTestKey,并且填充了鍵MyKeyName的值(用時(shí)間加以區(qū)分其值),而在SoftWare的第一層子節(jié)點(diǎn)中并沒(méi)有發(fā)現(xiàn)此EricSun。可以確定32位程序是操作注冊(cè)表信息是放在WOW6432Node節(jié)點(diǎn)下的 若我們對(duì)這段程序不做任何修改,在X64(或Any Cpu)的平臺(tái)下編譯、運(yùn)行的話,會(huì)發(fā)現(xiàn)在注冊(cè)表的SoftWare節(jié)點(diǎn)的第一層子節(jié)點(diǎn)中創(chuàng)建出了EricSun節(jié)點(diǎn)(并在此節(jié)點(diǎn)下創(chuàng)建相應(yīng)的注冊(cè)表信息),然后我們用同樣的程序去讀注冊(cè)表的時(shí)候也會(huì)發(fā)現(xiàn)他們讀取的地方不同(以程序中的時(shí)間信息加以區(qū)分) 總結(jié):X64,(或者Any Cpu) Platform下的程序會(huì)操作64位機(jī)器存放注冊(cè)表位置的注冊(cè)表信息,X86 Platform下的程序會(huì)操作32位機(jī)器存放注冊(cè)表位置的注冊(cè)表信息(即:WOW6432Node節(jié)點(diǎn)下的注冊(cè)表信息) 若想知道用32位程序如何操作64機(jī)器的注冊(cè)表信息,請(qǐng)關(guān)注我的下一篇文章: http://www.cnblogs.com/mingmingruyuedlut/archive/2011/01/21/1941225.html 該文章在 2021/2/18 18:27:33 編輯過(guò)
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |