2009-09-24 70 views
2

無法從XP受限/ guest用戶訪問Windows註冊表HKLM鍵佔無法訪問註冊表HKLM鍵

public int GetEnabledStatus() 
{ 
RegistryKey hklm = Registry.LocalMachine; 
int Res; 
try 
{ 
    RegistryKey run1 = 
     hklm.OpenSubKey(@"Software\Microsoft\Windows\myApp", true); 
    hkcu.OpenSubKey(@"Software\Microsoft\Windows\myApp", true); 
    Res = int.Parse(run1.GetValue("enabled").ToString()); 
} 
catch 
{ 
    Res = 0; 
    return Res; 
} 
finally 
{ 
    hklm.Close(); 
} 
    return Res; 
} 

這個代碼在管理員用戶帳戶精細,在有限的/ guest帳戶調用該函數不要回報價值。是否有任何解決方法

回答

5

您正在以「寫入」模式打開按鍵(第2個參數設置爲「true」)。作爲受限用戶,您無權寫入HKLM。通過將模式更改爲「只讀」(第二個參數設置爲「false」),您應該可以讀取該值。當作爲用戶限制:-)運行

private static int GetEnabledStatus() 
{ 
    const int defaultStatus = 0; 
    using (var key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\myApp")) // open read-only 
    { 
     int valueInt; 
     var value = (key != null 
      ? key.GetValue("enabled", defaultStatus) 
      : defaultStatus); 
     return (value is int 
      ? (int)value 
      : int.TryParse(value.ToString(), out valueInt) 
       ? valueInt 
       : defaultStatus); 
    } 
} 

無需異常處理,工作在我的機器上:

我會建議更新代碼如下。

+0

是的正確,我現在改變它的工作 – 2009-09-24 13:23:11

+0

'RegistryKey.OpenSubKey(string,false)'與'RegistryKey.OpenSubKey(string)'有什麼不同?我認爲後者是使用前者的簡寫形式,用「假」標誌。 – 2012-01-26 18:16:00

+0

所以它是,我的代碼片段使用沒有明確的錯誤參數:-)(你提到的簡短形式) – 2012-01-26 20:39:58

1

如果您只想讀取密鑰,請使用只帶有字符串的OpenSubKey重載。