2011-06-16 66 views
0

我想要做的是在一個密鑰中有多個 用戶名和文件夾路徑。如何從註冊表中讀取所有值

,所以我有這樣的結構

HKEY_LOCAL_MACHINE

- 軟件

- XYZ

- userDB的

現在userDB的我有信息像這樣

> NAME TYpe Data 
> 
> Admin Reg_sz C:\Desktop 
> 
> Admin2 REG_SZ C:\xyz\logs 

我如何能在userDB的讀值...

任何建議..感謝

我想這代碼:

  RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xyz"); 
     if (masterKey == null) 
     { 
      //Console.WriteLine("Null Masterkey!"); 
     } 
     else 
     { 

      table.Rows.Add(false, masterKey.GetValue("userDB"), DateTime.Now); 
      dataGridView2.DataSource = table; 
      //Console.WriteLine("MyKey = {0}", masterKey.GetValue("userDB")); 
     } 
     masterKey.Close(); 

,但我得到的錯誤 訪問註冊表項'HKEY_LOCAL_MACHINE \ SOFTWARE \ xyz'被拒絕。

+0

您的標籤有點奇怪。你的項目是WinForms還是asp.net?這與正則表達式有什麼關係? – CodesInChaos 2011-06-16 22:01:24

回答

1

當您談論閱讀主題中的值時,您的代碼實際上會寫入註冊表。

默認情況下,您無法將絕大多數HKLM註冊表寫入爲受限用戶。有限的用戶不得銷燬/操縱這些密鑰,因爲這存在安全風險。

您可以讓您的安裝程序(使用管理權限運行)更改共享註冊表項的權限。但這是不好的風格,我不會這樣做。

當使用asp.net時,可能會有與中等信任模型相關的其他限制。

您有:

RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xyz"); 

RegistryKey.CreateSubKey記錄爲:

創建一個新的子項或打開進行寫訪問現有的子項。

打開寫入權限很可能需要寫入權限。

RegistryKey.OpenSubKey用於打開讀取訪問密鑰。所以它很可能不需要寫入權限。

+0

那麼你能告訴我一種從HKLM中讀取的方法嗎? – user175084 2011-06-16 21:51:02

+1

'RegistryKey masterKey = Registry.LocalMachine.CreateSubKey(「SOFTWARE \\ xyz」);'這是如何評論出來的? – CodesInChaos 2011-06-16 21:51:49

+0

抱歉,我的錯誤,我沒有看到 – user175084 2011-06-16 21:52:59

1

您在哪一點拒絕訪問?你運行這個代碼提升或作爲管理員?

調用CreateSubKey()時寫入HKEY_LOCAL_MACHINE需要提升的權限時,您可能會失敗。

1

我認爲Registry.LocalMachine.CreateSubKey(「SOFTWARE \ xyz」)會嘗試打開帶有寫入權限的密鑰(如果該密鑰存在)。

嘗試用讀取權限打開密鑰。 我認爲你可以使用CreateSubKey(String,RegistryKeyPermissionCheck)來指定權限訪問。

欲瞭解更多信息,請參考MSDN:http://msdn.microsoft.com/en-us/library/dd411617.aspx

+0

我如何讀取userDB密鑰的值..?謝謝 – user175084 2011-06-16 22:05:45