2011-08-22 160 views
0

我目前正在建立一個註冊表資源管理器,主要是因爲我想支持一些更好的搜索操作。像'查找所有'和正則表達式一樣。我面臨的一個問題是,某些鍵在打開時會引發安全異常。我曾嘗試使用管理員權限運行該應用程序,我的用戶帳戶也是管理員。我用「requireAdministrator」請求特權嵌入了一個清單。我也嘗試將ClickOnce安全設置設置爲完全信任,這與requireAdministrator不兼容,或者Visual Studio告訴我......似乎沒有任何東西可以幫助避免此異常。註冊表訪問異常問題

我只想遍歷所有的鍵。我不想添加/刪除鍵。如果用戶希望刪除密鑰並且沒有權限,則會顯示錯誤消息。我只是想能夠有無限制的閱讀權限。這可能嗎?

FTR:我在Win7 x64上使用Vs2010u,項目是用C#編寫的.net 4.0。如果註冊表能夠讀取所有密鑰,即使它不允許您編輯其中的一些密鑰。我們也可以製作一個應用程序來做同樣的事情,這似乎是合適的。儘管我發現它很困難,而且似乎也沒有任何真正的幫助。只有鏈接鏈接圈子,耶。

[編輯]

下面是讀取按鍵代碼:

private void IterateSubKeys(RegistryKeyModel key) { 

     var subKeys = key.Key.GetSubKeyNames(); 
     var values = key.Key.GetValueNames(); 

     foreach (var valuename in values) { 
      try { 
       var valueKind = key.Key.GetValueKind(valuename); 
       var value = key.Key.GetValue(valuename); 

       key.Values.Add(new RegistryValueModel(valuename, value, valueKind)); 
      } 
      catch { } 
     } 

     foreach (var keyname in subKeys) { 
      try { 
       var subkey = key.Key.OpenSubKey(
        keyname, 
        RegistryKeyPermissionCheck.ReadSubTree, 
        RegistryRights.ReadKey); 

       key.SubKeys.Add(new RegistryKeyModel(subkey)); 
      } 
      catch { Console.WriteLine("Error reading key: {0}", keyname); } 
     } 
    } 
+0

你能否確認註冊表可以看到你的程序不能的密鑰?因爲有甚至註冊表鍵都看不到(但也許你的程序枚舉)? –

回答

2

這是由設計。有許多安全相關的密鑰只能通過系統帳戶訪問。您不能使用該帳戶。 Regedit無法讀取這些鍵,它們只是不可見。避免昂貴的異常將需要進行調整。