簡體   English   中英

C#注冊表設置

[英]C# Registry Setting

我正在設置注冊表設置,如果該值位於[HKEY_CURRENT_USER]中,但是如果該值位於[HKEY_CURRENT_USER \\ Software \\ Adob​​e \\ Acrobat Reader \\ 9.0 \\ ethan]中,則可以這樣做,然后出現以下錯誤:

例如{“無法寫入注冊表項。”} System.Exception {System.UnauthorizedAccessException}

有誰知道可能出什么問題了? 參見下面的代碼:

private string setRegKey(string machinename)
    {
        try
        {
            RegistryKey regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, machinename).OpenSubKey("Software").OpenSubKey("Adobe").OpenSubKey("Acrobat Reader").OpenSubKey("9.0").OpenSubKey("ethan");
            regKey.SetValue("Test", 1);
            regKey.Close();
            return "Success";
        }
        catch (Exception ex)
        {
            return "Error: " + ex.ToString();
        }
    }

您是否真的要更改遠程計算機上的設置? 我想如果用戶是域用戶,這可能會起作用。

無論如何,要注意的一件事是,每次調用“ OpenSubKey”時,都會得到一個RegistyKey對象的新實例,並且每個實例都需要進行處理。 否則,由於框架中的終結錯誤,您將開始泄漏注冊表句柄(可能已解決,但我偏離了)。

另外,也不必分別打開密鑰的每個節點(除非這與遠程打開的密鑰有關?)。 我建議將try塊中的代碼更改為以下內容:

using ( RegistryKey remoteUserKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, machinename) )
using ( RegistryKey remoteKey = remoteUserKey.OpenSubKey(@"Software\Adobe\Acrobat Reader\9.0\ethan") )
{
    remoteKey.SetValue("Test", 1);
    return "Success";
}

如果您不需要遠程更改它,請刪除前兩行,而改用它:

using ( RegistryKey key = Registry.LocalUser.OpenSubKey(@"Software\Adobe\Acrobat Reader\9.0\ethan") )

從運行框中運行regedt32.exe將打開regedit版本,該版本可讓您查看每個注冊表項上設置的權限。 您可以使用它來確定編輯密鑰所需的權限。 下一步將是確保應用程序運行所在的帳戶具有適當的權限。 如果在啟用了用戶訪問控制的情況下運行該應用程序,則可能需要通過在按住Shift的同時右鍵單擊該exe並選擇“以管理員身份運行”選項來啟動該應用程序。 (這就是升級應用程序的意思)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM