在.Net 1.x當中,使用Microsoft.Win32.RegistryKey類別的GetValue方法讀取登錄資料時,其實資料都是經過「處理」的;
例如,某個字串資料本來的值是
%SystemRoot%System32IoLogMsg.dll
但是用GetValue方法得到的數據卻是
C:WINDOWSSystem32IoLogMsg.dll
也就是說,在讀取登錄中的字串時,系統會自作主張地替你展開環境變數。
這的確省去我們呼叫Environment.ExpandEnvironmentVariables方法的麻煩,但是反過來,當我們希望原封不動地拷貝一個註冊表的字串時則束手無策。
在.Net2.0當中,我們驚訝地發現Microsoft.Win32.RegistryKey類別有了一個小小的改動,就是其GetValue方法增添了一個新的重載:
public Object GetValue (
string name,
Object defaultValue,
RegistryValueOptions options
)此方法的第三個參數是一個枚舉,目前只有一個有用的值就是DoNotExpandEnvironmentNames。
指定該值,GetValue得到的結果就是沒有經過展開的資料了。